我在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
答案 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)
好消息是ASP.Net 4.0将解决这个问题。
http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx
答案 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>