Javascript访问母版页中的控件

时间:2009-02-18 06:54:56

标签: asp.net javascript

我的MasterPage中有一个文本框控件Super1。

我正在使用javascript从我的内容页面访问此控件,如下所示:

<asp:Content ID="ContentPage" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script type="text/javascript">
    function Somethin() {
        {
            document.forms[0].elements['Super1'].value = "sdfsd";
            //document.getElementById('<%=Super1.ClientID%>').value = "sdfsdf";                
        }
    }
</script>
</asp:Content>

但是当页面加载时,它说没有找到Super1。我如何访问Super1?

4 个答案:

答案 0 :(得分:0)

您必须确保文档已加载,请确保调用依赖于正在加载的DOM的函数。 E.g:

<script type="text/javascript">
window.onload = function() {
  Somethin();
}
</script>

答案 1 :(得分:0)

在您的母版页的onload中添加以下代码:

string script = @"<script>
function Somethin() {
        document.getElementById('" + Super1.ClientID + @"').value = 'sdfsd';               
}

Somethin();
</script>";
if (!Page.ClientScript.IsClientScriptBlockRegistered("somethin_script_block"))
{
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "somethin_script_block", script);
}

这会将您的脚本添加到页面的末尾。

编辑:我刚刚意识到,您在javascript代码中直接使用控件ID。这可能会导致异常。我更新你的代码来解决它。

我希望这会有所帮助。

答案 2 :(得分:0)

从您发布的示例代码中,由于您说您正在使用控件,请检查您尝试获取的控件的呈现ID。根据我的经验,这个名字就像ctl100_masterpagename_namingcontainer_controlname那样疯狂......它也需要出现在js中。

Super1可能位于不同的命名容器中(母版页的控件集合)。您需要在母版页呈现期间在全局javascript变量中呈现控件的clientid,以便可以通过子页面中的javascript访问它,或者您需要获取对Masterpage的引用,在那里找到控件并写出您孩子页面中的客户端ID javascript ...

像...一样的东西。

如果文本框位于其自己的内容占位符

var txtSuper1 = Master.FindControl(“ContentPlaceHolderName”)。FindControl(“Super1”)为文本框;

或者如果它不在内容持有者中 var txtSuper1 = Master.FindControl(“Super1”)作为文本框;

第三个选项可能是将控件公开为主页的属性(不确定) - 我的webforms已生锈。

答案 3 :(得分:0)

在母版页上,为控件声明一个javascript变量,例如:

<asp:TextBox id="Super1" runat="server"/>
...
<script type="text/javascript">
var txtSuper1 = document.getElementById('<%= Super1.ClientID %>');
</script>

使用ClientID属性非常重要,因为呈现控件的ID(在客户端上)将与服务器控件的ID不同(由于命名容器)。

现在,您可以从内容页面中声明的javascript访问文本框:

<asp:Content ID="ContentPage" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script type="text/javascript">
function Somethin()
{
  txtSuper1.value = "sdfsd";
}
</script>
<a href="javascript:Somethin()">click me</a>
</asp:Content>

BTW:在你的代码中,函数Somethin(){{...}}

中有重复的大括号