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

时间:2011-04-13 15:40:22

标签: javascript jquery asp.net jquery-ui sitecore

我在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...
    }

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

我发现了这个问题(HiddenField value modified by javascript is not posted back) 这给了我答案,并涉及在open方法构造函数中的open:callback中添加一行代码。

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

尝试使用ClientID而不是UniqueID

__ doPostBack('&lt;%= lnkRedirectButton.ClientID%&gt;','');