由ASP.NET操作的HTML元素的id和名称属性

由ASP.NET操作的HTML元素的id和名称属性,asp.net,javascript,html,Asp.net,Javascript,Html,我的C#ASP.NET应用程序中有一个问题,在运行时分别使用前缀“MainView#”和“MainView$”修改id和name标记。所以我的代码是: <asp:Button ID="OKToContinueCheckInButton" runat="server" CausesValidation="False" Visibility="false" Style="display: none" OnClick="btnOKToContinueCheckIn" /> <scr

我的C#ASP.NET应用程序中有一个问题,在运行时分别使用前缀“MainView#”和“MainView$”修改id和name标记。所以我的代码是:

<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和名称值的方法。谢谢


-Sephrial

我想这会帮助你

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

这是实现这个技巧的部分

<%= OKToContinueCheckInButton.ClientID %>


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

ID已更改,因此您不必担心在用户控件、自定义控件、中继器等之间保持ID的唯一性


你可以用西里尔的方法。我还发现JQuery非常适合这个模型,因为您可以根据控件在文档中的类或位置轻松引用它们。

从后面的代码编写脚本。将其注册为启动脚本,并使用对象的客户端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();

必须像这样使用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>

好消息是ASP.Net 4.0将解决这个问题


感谢您的所有回复,我想我理解为什么要替换这些值。但是,当我尝试上面的解决方案时,它给出了一个错误,因为它生成了下面的HTML,其中包含一个“u”而不是一个“$”。我使用的是document.getElementById().click()


我想你忘了单引号:

document.getElementById(<%= OKToContinueCheckInButton.ClientID %>).click();
document.getElementById()。单击();
应该是:

document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();
document.getElementById(“”)。单击();

如果您愿意使用jQuery,这根本不是问题,您不必担心更改名称。通过使用$=(以结尾)选择器,这将不是问题:

if (answer)
  $("a[id$='MainView_OKToContinueCheckInButton']:first").click();

jQuery选择器非常容易使用

为什么你会让他做一些无法维护的事情呢?感谢上帝-这个反功能让我对中风一分为二-遗憾的是他们的修复程序如此笨拙,但这只是一个开始
document.getElementById('<%= OKToContinueCheckInButton.ClientID %>').click();
if (answer)
  $("a[id$='MainView_OKToContinueCheckInButton']:first").click();