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

时间:2009-01-29 02:00:11

标签: asp.net javascript html

我在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和名称值。谢谢!

-Sephrial

9 个答案:

答案 0 :(得分:10)

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

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

这是制作技巧的部分

<%= OKToContinueCheckInButton.ClientID %>

答案 1 :(得分:3)

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

更改了ID,因此您无需担心在用户控件,自定义控件,转发器等中保持ID唯一。

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

答案 2 :(得分:3)

答案 3 :(得分:2)

我想你忘记了单引号:

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

应该是:

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

答案 4 :(得分: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>

答案 5 :(得分: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();

答案 6 :(得分: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>

答案 7 :(得分:1)

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

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

jQuery选择器非常容易使用

答案 8 :(得分:0)

感谢您的所有回复,我想我理解为什么要更换这些值。但是,当我尝试上面的解决方案时,它会产生错误,因为它会生成以下带有'_'而不是'$'的HTML。我正在使用,document.getElementById(&lt;%= OKToContinueCheckInButton.ClientID%&gt;)。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>