ASP.NET操作的HTML元素的id和name属性

5

我在我的C# ASP.NET应用程序中遇到了一个问题,其中id和name标签在运行时被修改为前缀“MainView_”和“MainView$”。因此,我的代码:

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('OKToContinueCheckInButton').click();
// -->
</script> 

成为:

<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('OKToContinueCheckInButton').click();
// -->
</script>

getElementID()返回null,因为名称已更改。有人能告诉我为什么会发生这种情况,是否有可能禁用更改id和name值的方法。谢谢!

-Sephrial

9个回答

10

我认为这会对你有所帮助...

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();
// -->
</script>

这就是起作用的部分。

<%= OKToContinueCheckInButton.ClientID %>

3

这是Asp .Net Forms模型工作方式的基本部分。

ID被更改,这样您就不必担心在用户控件、自定义控件、重复器等中保持ID唯一。

您可以使用Cyril的方法。我也发现JQuery非常适合这个模型,因为您可以通过它们的类或在文档中的位置轻松引用控件。


3
好消息是ASP.Net 4.0将解决这个问题。 点击此处了解更多关于ASP.Net 4.0的ClientId概述。

天啊,谢天谢地——这个反功能让我感到非常烦躁和头痛——可惜他们的修复方法有些笨拙,但至少是一个开始。 - annakata

2
我认为您忘记了单引号:
document.getElementById(<%= OKToContinueCheckInButton.ClientID %>).click();

应该是:

document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();

1
<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(<%=OKToContinueCheckInButton.ClientID %>).click();
// -->
</script>

1

从代码后台编写脚本。将其注册为启动脚本,并使用对象的客户端ID。

System.Text.StringBuilder script = new System.Text.StringBuilder();
script.Append("var answer = confirm('Some Warning');");
script.Append("if (answer)");

// The client ID will be what is put in the browser so it will find it.
script.AppendFormat("document.getElementById('{0}').click();", this.btnSomeButton.ClientID);

// Hook this up to the button
this.btnSomeButton.OnClientClick = script.ToString();

为什么要让他做一些难以维护的事情? - Cyril Gupta

1

您必须像这样使用ClientID属性:

<asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(<%=OKToContinueCheckInButton.ClientID%>).click();
// -->
</script>

1
如果您愿意使用jQuery,这将不是问题,并且您不必担心更改名称。通过使用$=(以...结尾)选择器,这将不会成为问题:
if (answer)
  $("a[id$='MainView_OKToContinueCheckInButton']:first").click();

jQuery 选择器非常易于使用


0
感谢您所有的回复,我认为我明白为什么值被替换了。但是,当我尝试上述解决方案时,它会产生一个错误,因为它生成以下HTML '_' 而不是 '$'。我正在使用document.getElementById(<%= OKToContinueCheckInButton.ClientID %>) .click();
<input type="submit" name="MainView$OKToContinueCheckInButton" value="" id="MainView_OKToContinueCheckInButton" Visibility="false" style="display: none" />

<script type="text/javascript">
<!--
    var answer = confirm("Some Warning");
    if (answer)
        document.getElementById(MainView_OKToContinueCheckInButton).click();
// -->
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接