我在 sitecore 中有一个子布局(它是一个 ascx 控件),其中包含一个隐藏字段和一个图像映射。根据被点击的图像 map 的区域,我想设置隐藏字段的值,然后向服务器发起回发。
我的标记如下:
<script type="text/javascript">
function SetRegion(regionName) {
$('#<%=hdnRegion.ClientID%>').val(regionName);
__doPostBack('<%=lnkRedirectButton.UniqueID%>', '');
}
</script>
<img src="/Images/Interface/Map-Background.png" usemap="#regionMapView" class="map" />
<map id="regionMapView" name="regionMapView">
<area id="x" href="javascript:SetRegion('x')" shape="poly" coords=",,,," />
<area id="y" href="javascript:SetRegion('y')" shape="poly" coords=",,,," />
<area id="z" href="javascript:SetRegion('z')" shape="poly" coords=",,,," />
</map>
<asp:HiddenField ID="hdnRegion" runat="server" />
<asp:LinkButton ID="lnkRedirectButton" onclick="lnkRedirectButton_Click" runat="server" />
我的代码隐藏如下:
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...
}
我添加了虚拟 LinkButton 用作回发的 Hook (以创建代码隐藏方法来处理回发)。
我已经在独立的网络应用程序中尝试过这段代码,它似乎工作正常,所以我想知道 sitecore 是否发生了什么事情,在回发过程中弄乱了隐藏字段的值?
澄清;回发事件被触发并在服务器上正常处理,我在 javascript 中使用 alert() 来确认隐藏字段值设置正确。
编辑: 重新标记问题以包含 jquery-ui 标记。 这个问题似乎与所有这些都发生在 div 内部有关,该 div 使用 jQuery UI 库中的 $().dialog() 方法显示...
最佳答案
正如我在编辑中提到的,这个问题与隐藏字段(以及其他所有内容)位于 div 中有关,该 div 使用 jQuery UI 对话框方法进行操作以创建弹出窗口。
我发现了这个问题 ( HiddenField value modified by javascript is not posted back ) 这给了我答案,并涉及向 open: 对话框方法构造函数中的回调添加一行代码。
我的用于打开对话框的 JavaScript 代码修改如下:
$('#MyDialog').dialog({
closeOnEscape: true,
open: function(event, ui) {
$(this).parent().appendTo("form"); //this line sorted everything!
}
});
引用DanaBenson “我相信根本原因是 jQueryUI 将对话框附加到 BODY 标签而不是 FORM 标签,而 .Net 需要它。”
关于javascript - asp :HiddenField fails to be persisted across postback 的 jQuery 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651905/