2012-01-13 56 views
4

我試圖在JavaScript中檢索服務器控件。出於測試目的,我從頁面加載事件調用JavaScript函數。ASP.NET document.getElementById('<%= Control.ClientID%>');返回null

protected void Page_Load(object sender, EventArgs e){ 
    ClientScript.RegisterClientScriptBlock(GetType(), "js", "confirmCallBack();", true); 
} 

我的JavaScript函數是

function confirmCallBack() { 
    var a = document.getElementById('<%= Page.Master.FindControl("PlaceHolderContent").FindControl("Button1").ClientID %>'); 
    var b = document.getElementById('<%=Button1.ClientID%>'); 
} 

我的問題是,無論是A和B返回NULL。即使當我查看頁面源時,也會返回正確的ClientID。

我應該補充說我正在使用母版頁。

任何想法。

+0

我也會盡力去完成你想要什麼,但對於一個快速的答案,爲什麼不您嘗試通過頁面加載中的參數傳遞Id? confirmCallBack(Button1.ClientID); – 2012-01-13 01:18:15

+0

簡單的答案是不要使用自動生成的ASP ids – Raynos 2012-01-13 01:20:41

回答

8

嘿!

你必須使用RegisterStartupScript而不是RegisterClientScriptBlock

這裏我舉的例子。

母版:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MasterPage.master.cs" 
    Inherits="prueba.MasterPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script type="text/javascript"> 

     function confirmCallBack() { 
      var a = document.getElementById('<%= Page.Master.FindControl("ContentPlaceHolder1").FindControl("Button1").ClientID %>'); 

      alert(a.value); 

     } 

    </script> 

    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

WebForm1.aspx的

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" 
    CodeBehind="WebForm1.aspx.cs" Inherits="prueba.WebForm1" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<asp:Button ID="Button1" runat="server" Text="Button" /> 
</asp:Content> 

WebForm1.aspx.cs中

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace prueba 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      ClientScript.RegisterStartupScript(this.GetType(), "js", "confirmCallBack();", true); 

     } 
    } 
} 
+0

非常感謝。我被困在那裏已有好幾年了。 – user346443 2012-01-13 01:35:47

+0

感謝人,就像我之前的用戶一樣,我被困在這上面好幾個小時。我正在接近把我的頭髮撕掉:0。 – Banzboy 2015-07-08 00:56:18

0

是否可見Button1?我的意思是,從服務器端。確保Button1.Visible爲真。

不是Visible的控件將不會以HTML格式呈現,因此儘管它們被分配了ClientID,但它們實際上並不存在於客戶端。

+0

有什麼方法可以獲得隱形asp.net控件的ID嗎? – 2016-10-12 06:44:42

+0

@DKR ClientID屬性爲您提供_would_將賦予其在頁面上呈現的控件_if_的ID。否則這些信息在客戶端幾乎是無用的。 – Humberto 2016-10-14 14:16:15

相關問題