C# 在Jquery中更改的值不会显示在codebehind上 ASP.NET 4 Jquery 1.7.1 浏览器:IE9

C# 在Jquery中更改的值不会显示在codebehind上 ASP.NET 4 Jquery 1.7.1 浏览器:IE9,c#,jquery,asp.net,C#,Jquery,Asp.net,嗨 我在UpdatePanel中使用jquery和gridview控件,因此每次单击gridview的一行jquery都会编辑HiddenField控件的值,因此当我需要“所选索引”时,我只使用HiddenField的值。在Chrome和Firefox中,一切都可以正常工作,但在IE9中却不行。单击一行并将其索引分配给HiddenField之后,当我单击一个按钮并触发服务器端事件时,当我检索HiddenField的值时,我得到它的默认值(在标记中定义的值),而不是更改的值。奇怪的是,如果我使用并

我在UpdatePanel中使用jquery和gridview控件,因此每次单击gridview的一行jquery都会编辑HiddenField控件的值,因此当我需要“所选索引”时,我只使用HiddenField的值。在Chrome和Firefox中,一切都可以正常工作,但在IE9中却不行。单击一行并将其索引分配给HiddenField之后,当我单击一个按钮并触发服务器端事件时,当我检索HiddenField的值时,我得到它的默认值(在标记中定义的值),而不是更改的值。奇怪的是,如果我使用并提醒(HiddenField.value),它会显示行索引!因此,问题只发生在服务器端函数上,即使在回发之后,HiddenField值也会被保留,但在服务器端始终是默认值

这是我的Jquery代码:

$('[id$=divtxtIdPresentacion]').click(function () {

             var tex = $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value");

             var index = $(this).attr("commandargument");             

             if (tex != index) {

                 $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value", index);
             }

         });
还有希登菲尔德(以防万一):


尝试如下设置值:

    $('[id$=divtxtIdPresentacion]').click(function () {

         var tex = $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value");

         var index = $(this).attr("commandargument");             

         if (tex != index) {
           $('#<%=HFSeleccionIndexRow.ClientID%>').val(index);
         }
     });
$('[id$=divtxtdpresentacion]')。单击(函数(){
var tex=$('#').attr(“值”);
var index=$(this.attr(“commandargument”);
如果(tex!=索引){
$('#').val(索引);
}
});

对于已更改的选定索引,无需使用jQuery代码。您已使用更新面板,因此不会向用户显示服务器跳闸


最好使用命令参数、命令名和fire server端单击。

尝试改用此jquery函数

$('[id$=divtxtIdPresentacion]').click(function () {
    var tex = $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value");
    var index = $(this).attr("commandargument");             
    if (tex != index) {
        if($.browser.msie){
             $("#<%=HFSeleccionIndexRow.ClientID%>").prop("defaultValue", index);
        }
        else{
             $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value", index);
        }
    }
});
$('[id$=divtxtdpresentacion]')。单击(函数(){
var tex=$('#').attr(“值”);
var index=$(this.attr(“commandargument”);
如果(tex!=索引){
如果($.browser.msie){
$(“#”)prop(“默认值”,索引);
}
否则{
$('#').attr(“值”,索引);
}
}
});

您的隐藏输入字段不在更新面板控件内。任何到服务器的异步往返都只会导致
UpdatePanel
本身中的控件在UI上更新,因此即使后台代码运行并更新隐藏字段,在前端它们仍然保持不变,因为它们位于面板之外

尝试移动
标记中的隐藏字段:

<asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:HiddenField runat="server" ID="HFSeleccionIndexRow" value="0" />
        .....
    </ContentTemplate>
</asp:UpdatePanel>

.....

是的,我使用了alert(某种东西)来确定它,正如我所说的,它在其他浏览器上运行良好,我只是测试了这两个浏览器,以确定OK,您的隐藏输入字段是否在更新面板控件中?如果没有,请尝试移动
标记中的隐藏字段,然后再次测试。它成功了!!非常感谢你!从昨天起我就被这件事折磨死了!如果我错了,我很抱歉,但是使用更新面板,至少会触发部分回发,这意味着服务器会跳闸,不是吗?(虽然我正在考虑这样做,但这个bug正在杀死我……)使用更新面板,将触发整个服务器跳闸,但只有更新面板中的代码才会更改。若你们在更新面板外有下拉列表,那个么它不会改变,它的值保持不变。若启动jquery调用,那个么在更改数据后如何绑定网格?
$('[id$=divtxtIdPresentacion]').click(function () {
    var tex = $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value");
    var index = $(this).attr("commandargument");             
    if (tex != index) {
        if($.browser.msie){
             $("#<%=HFSeleccionIndexRow.ClientID%>").prop("defaultValue", index);
        }
        else{
             $('#<%=HFSeleccionIndexRow.ClientID%>').attr("Value", index);
        }
    }
});
<asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:HiddenField runat="server" ID="HFSeleccionIndexRow" value="0" />
        .....
    </ContentTemplate>
</asp:UpdatePanel>