从jQuery中的asp.net runat服务器获取ID

时间:2011-03-22 14:38:39

标签: javascript jquery asp.net runatserver

我正在尝试使用ASP.NET在jQuery中制作一些东西。但runat="server"中的ID与HTML中使用的ID不同。

我曾经用它来从这种情况中获取ID:

$("#<%=txtTest.ClientID%>").val();

但在这种情况下,它不起作用。我对其原因一无所知。

的Javascript

/* Modal */
function contatoModal() {
    //alert("Test");
    alert($("#<%=txtTest.ClientID%>").val());
}

HTML

< input runat="server" id="txtTest" value="test" />

任何提示?

8 个答案:

答案 0 :(得分:19)

<%= txtTest.ClientID %>应该可以工作,但不能在服务器端脚本不执行的单独的javascript文件中工作。另一种可能性是使用类选择器:

<input runat="server" id="txtTest" value="test" class="txtTest" />

然后:

var value = $('.txtTest').val();

答案 1 :(得分:5)

正如其他人提到的,你可以将类选择器传递给jQuery,但这有点乱。我更喜欢使用jQuery attribute ends with selector。鉴于生成的ID是控件的展平层次结构,您可以使用&#34;结束&#34;选择器来找到你的元素。

<input runat="server" id="txtText" />

呈现时,生成的ID会变成这样(如果在主页的内容持有者中):

<input id="ctl00_contentplaceholder_txtText" />

要找到此控件:

$("input[id$='txtText']")

在转发器中使用时要小心。

答案 2 :(得分:4)

在WebForm / HTML页面....

<asp:TextBox ID="txtUserName" runat="server" Class="form-control"></asp:TextBox>  

在Jquery

var UserName = $("[id*=txtUserName]").val();
alert(UserName);

100%当然为我工作......

答案 3 :(得分:2)

尝试将其放入变量名称:

var txtTestID = '#' + '<%=txtTest.ClientID %>';

$(txtTestID).val();

我不确定<%=是否喜欢双引号内。不使用单引号时,我总是有混合行为。

答案 4 :(得分:2)

使用ASP.NET 4并将ClientIDMode设置为“Predictable”时,您可以根据层次结构预测ID。或者将其设置为“静态”,因此asp.net不会搞砸它。

ScottGu关于它的文章http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

这在使用外部JS文件方案时非常有用。

答案 5 :(得分:1)

正如Darin Dimitrov在他的回答中所说:

  

<%= txtTest.ClientID %> 应该有效但不在单独的javascript中   服务器端脚本未执行的文件

我能找到的解决方案是:

<input runat="server" id="txtTest" value="test" class="txtTest" />

  • 使用class代替ID

使用类可以在任何地方检索值。这是最好的解决方案之一(通常是最好的)

var value = $('.txtTest').val();

  • 使用ClientID
  • 中的aspx代码

您始终可以在aspx中调用ClientID,但如果您正在使用某种结构,则这不是最佳解决方案。我喜欢在测试时使用这种方法。

var value = $('#<%=txtTest.ClientID%>').val();

您还可以在外部js文件中使用ClientID并使用解决方法。 信息不严谨,只有在您真正需要时才使用。我通常在使用Telerik时执行此操作。

在aspx中:

var id = <%=txtTest.ClientID%>;

在js文件中:

var value = $('#'+id).val();

所以HTML变为

<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />

并且js可以将其命名为

var value = $('#txtTest').val();

此解决方案的问题在于您需要非常小心,以避免在页面的ids上出现问题。请勿在控制器中使用Static模式。

作为州MSDN:

  

ClientID值设置为ID属性的值。如果   control是一个命名容器,控件用作顶部   为其包含的任何控件命名容器的层次结构。


shaans's answer的链接是检查有关ClientIDMode的额外信息的绝佳位置。

Cleaner HTML Markup with ASP.NET 4 Web Forms - Client IDs (VS 2010 and .NET 4.0 Series)

答案 6 :(得分:0)

要避免渲染ID的问题,请改用类。在渲染过程中不会改变:

function contatoModal() {

//alert("Test");

alert($(".txtTest").val());

}

HTML:

< input runat="server" id="txtTest" value="test" class="txtText" />

答案 7 :(得分:-1)

在 input 中添加一个 css 类,然后在 jQuery 中使用这个类来获取 input 元素将解决这个问题。