asp:HiddenField的jQuery更新无法在回发中持久化

我在sitecore(它是一个ascx控件)中有一个子布局,它包含一个隐藏字段和一个图像映射。 根据单击的图像映射区域,我想设置隐藏字段的值,然后启动回发到服务器。

我的标记如下:

 function SetRegion(regionName) { $('#').val(regionName); __doPostBack('', ''); }          

我的代码隐藏如下:

  protected void lnkRedirectButton_Click(object sender, EventArgs e) { string region = hdnRegion.Value; //at this point, I expect hdnRegion.Value to be "x" "y" or "z" but it's always coming back empty :-( //do stuff... } 

我添加了虚拟LinkBut​​ton作为回发的钩子(创建一个代码隐藏方法来处理回发)。

我已经在一个独立的Web应用程序中尝试了这个代码,它看起来工作正常,所以我想知道是否有一些正在发生的事情会破坏隐藏字段在回发过程中的价值?

澄清; 回发事件正在服务器上触发并处理好,我在javascript中使用alert()来确认隐藏的字段值是否正确设置。

编辑:重新标记的问题包括jquery-ui标记。 这个问题似乎与以下事实有关:所有这一切都发生在一个div中,它在jQuery UI库中使用$()。dialog()方法显示…

正如我的编辑中所提到的,这个问题与隐藏字段(以及其他所有内容)在div中的事实有关,div使用jQuery UI对话框方法来操作以创建弹出窗口。

我发现这个问题( 由javascript修改的HiddenField值没有回发 )给了我答案,并涉及在对话框方法构造函数中添加一行代码到open:callback。

我打开对话框的JavaScript代码修改如下:

 $('#MyDialog').dialog({ closeOnEscape: true, open: function(event, ui) { $(this).parent().appendTo("form"); //this line sorted everything! } }); 

引用DanaBenson “我认为根本原因是jQueryUI将对话框附加到BODY标记而不是FORM标记,其中.Net需要它。”

为什么不将值作为回发参数而不是隐藏字段值传递回来,因为您只是立即回发?

尝试使用ClientID而不是UniqueID

__doPostBack(’<%= lnkRedirectButton.ClientID%>‘,”);