【问题标题】:Getting ID from asp.net runat server in jQuery在 jQuery 中从 asp.net runat 服务器获取 ID
【发布时间】:2011-07-20 13:28:14
【问题描述】:

我正在尝试使用 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" />

有什么建议吗?

【问题讨论】:

  • 文本框的 ID 和 实际输出什么?

标签: javascript jquery asp.net runatserver


【解决方案1】:

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

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

然后:

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

【讨论】:

  • 哇!那行得通...我把我的函数放在我的 ascx 页面中,它现在可以工作了。我知道的类部分(但也感谢提示),它在单独的 javascript 中工作(作为类)。 没有办法在我的 function.js 页面中运行服务器 ID 吗? script_path: script/function.js ascx_path: components/contact.ascx 问候
  • 没有办法把asp.net的id码放到JS文件里,asp.net不会往里面放值。
【解决方案2】:

正如其他人所提到的,您可以将类选择器传递给 jQuery,但这有点混乱。我更喜欢使用jQuery attribute ends with selector。鉴于生成的 ID 是扁平化的控件层次结构,您可以使用“ends with”选择器来查找您的元素。

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

渲染时,生成的 ID 变成这样(如果在母版页的内容占位符内):

<input id="ctl00_contentplaceholder_txtText" />

要找到这个控件:

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

在中继器中使用它时要小心。

【讨论】:

    【解决方案3】:

    在 WebForm / HTML 页面中......

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

    在 Jquery 中

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

    100% 肯定它对我有用....

    【讨论】:

    • 此方法适用于... Asp.net 控件...
    • 这个答案会起作用-如果你想选择 id 包含给定字符串的元素..
    【解决方案4】:

    尝试将其放入变量名中:

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

    我不确定&lt;%= 是否喜欢在双引号内。不使用单引号时,我的行为总是很复杂。

    【讨论】:

    • 这也不起作用。与我的示例相同,但无论如何感谢您的提示 =D PS:这次我使用了单引号。 =X
    【解决方案5】:

    当使用 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 文件场景时非常有用。

    【讨论】:

      【解决方案6】:

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

      &lt;%= txtTest.ClientID %&gt; 应该可以工作,但 不在单独的 javascript 中 不执行服务器端脚本的文件

      我能找到的解决方案是:

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

      • 使用class 而不是ID

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

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

      • aspx 中使用ClientID 代码

      您始终可以在 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 属性的值。如果 控件是一个命名容器,控件用作顶部 它包含的任何控件的命名容器层次结构。


      shaans's answer 的链接是查看有关 ClientIDMode 的额外信息的好地方。

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

      【讨论】:

        【解决方案7】:

        为避免渲染 ID 出现问题,请改用类。这在渲染过程中不会改变:

        function contatoModal() {
        
        //alert("Test");
        
        alert($(".txtTest").val());
        
        }
        

        HTML:

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

        【讨论】:

        • 我可以添加看起来更整洁
        • 它可能无法按预期工作:jquery 中的类是 txtTest,在 HTML 中不同:txtText - 错字?
        【解决方案8】:

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

        【讨论】:

        • 从问题中我们期望代码尝试。同样,我们可以在答案中使用代码来说明。
        猜你喜欢
        • 2010-12-16
        • 2012-11-14
        • 2023-03-27
        • 2017-04-10
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        相关资源
        最近更新 更多