问题描述
||
我在sitecore(这是一个ascx控件)中有一个子布局,其中包含一个隐藏字段和一个图像映射。根据要单击的图像映射的区域,我要设置隐藏字段的值,然后启动回发到服务器。
我的标记如下:
<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用作回发的钩子(创建用于处理回发的代码隐藏方法)。
我已经在独立的Web应用程序中尝试过此代码,并且看起来工作正常,所以我想知道Sitecore是否发生了某些事情,从而在回发过程中混淆了隐藏字段的值?
澄清;已在服务器上激发并处理回发事件,确定,并且我已经在javascript中使用alert()来确认正确设置了隐藏字段值。
编辑:
重新标记的问题以包含jquery-ui标记。
这个问题似乎与以下事实有关:所有这些都发生在div内部,该div使用jQuery UI库中的$()。dialog()方法显示...
解决方法
正如我的编辑中提到的,此问题与以下事实有关:隐藏字段(以及其他所有内容)位于div内,该div使用jQuery UI对话框方法操作以创建弹出窗口。
我发现了这个问题(由javascript修改的HiddenField值未发回)
这给了我答案,并且涉及到在对话框方法构造函数中的open:回调中添加一行代码。
我打开对话框的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%> \',\'\');