【问题标题】:passing hidden field to jquery将隐藏字段传递给jquery
【发布时间】:2012-11-12 18:32:44
【问题描述】:

我正在使用 json 在我的应用程序后面的代码中运行一个函数。一切正常,除了我不知道如何将隐藏字段传递给它这是我的 jquery 代码:

  $(document).ready(function () {
             $("input[id$='btnP']").click(function (e) {
 var hiddenfield= $("#<%=hidden.UniqueID%>"); //This Does not work!!!!!
                 $.ajax({
                     type: "POST",
                     url: "MyDoc.aspx/BtnOpen",
                     data: "{'message': '" + hidden.val() + "'}",
                     contentType: "application/json; charset=utf-8",
                     dataType: "json",

                     success: function (msg) {
                         if (msg.d == 'Sent') {

                         }
                         else {

                         }
                     }

                 });

                 e.preventDefault();
             });

编辑:::

我的隐藏字段在 gridview 中是这样的:

 <asp:TemplateField HeaderText="View">                      
         <ItemTemplate>
    <input type="submit" value="Send" id="btnP"  runat="server" />
    <asp:HiddenField runat="server" ID="hidden"  Value='<%# Eval("ID" )%>'  />
           </ItemTemplate>
             </asp:TemplateField>

【问题讨论】:

    标签: c# jquery asp.net parameters hidden-field


    【解决方案1】:

    有几个选项可以获取隐藏字段值:

    1) 您可以将隐藏字段的 ClientIDMode 属性设置为静态

    <asp:HiddenField runat="server" ID="hidden" ClientIDMode="Static" Value="yourValue"/>
    

    然后你可以使用下面的代码:

    var hiddenField = document.getElementById('hidden');
    ....
    hiddenField.value
    

    2) 使用 ClientID 属性:

    var hiddenField = $("#<%=hidden.ClientID %>");
    ...
    hiddenField.val();
    

    了解ClientID和UniqueID的区别here

    UPD。

    如果你需要从 GridView 传递一些参数给函数,你可以不使用 HiddenField:

    只需从您的输入中删除“服务器”标签并添加 onclick 事件。

    <asp:TemplateField HeaderText="View">                      
        <ItemTemplate>
           <input type="submit" value="Send" id="btnP" onclick="BtnOpen('<%# Eval("ID" ) %>');" />
        </ItemTemplate>
    </asp:TemplateField>
    

    然后添加你的功能:

    <script>
        function BtnOpen(id) {
            $.ajax({
                type: "POST",
                url: "MyDoc.aspx/BtnOpen",
                data: "{'message': '" + id + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
    
                success: function (msg) {
                    if (msg.d == 'Sent') {
    
                    }
                    else {
    
                    }
                }
            });
        }
    </script>
    

    【讨论】:

    • 我试过了,但它说的是未知实体。唯一的问题是我的隐藏字段在gridview里面..
    • @Sam1 好的。这只是另一个问题。已更新我的答案 - 在这种情况下您不需要使用隐藏字段。
    【解决方案2】:
    var hiddenfield= $("# ...
    

    hidden.val()
    

    该变量未调用hidden

    【讨论】:

    • IIRC,如果 BtnOpen 是 ASP.NET Web 方法,提问者无法在 data 中传递原始对象。在这种情况下它必须是一个字符串。
    • @FrédéricHamidi 我对此并不熟悉。我添加了data的字符串形式的语法。
    • 实际上不能是查询字符串。它必须是 JSON 字符串(确实是"{'message': '" + hiddenfield.val() + "'}")。有关血腥细节,请参阅this Encosia article
    • @FrédéricHamidi 很奇怪,我得记住这个。我只是继续删除了那个位
    • @JamesMontagne 这里唯一的问题是我的隐藏字段在 gridview templatefield->itemtemplate
    【解决方案3】:

    你应该这样做

     $(document).ready(function () {
             $("input[id$='btnP']").click(function (e) {
    
                 var hiddenfieldValue = $("#<%=hidden.ClientID %>").val(); //This works!!!!!
    
                 $.ajax({
                     type: "POST",
                     url: "MyDoc.aspx/BtnOpen",
                     data: {"message": hiddenfieldValue},
                     contentType: "application/json; charset=utf-8",
                     dataType: "json",
    
                     ...
                 });
    
                 e.preventDefault();
             });
    

    【讨论】:

    • 抱歉应该是hiddenfield
    • hiddenfield 已经是一个 jquery 对象,所以不需要重新包装。
    • 这里唯一的问题是我的隐藏字段在gridview templatefield->itemtemplate中,所以jquery说未知实体
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2015-09-12
    • 2011-11-02
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多