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

Javascript asp:HiddenField的jQuery更新无法在回发过程中持久化,javascript,jquery,asp.net,jquery-ui,sitecore,Javascript,Jquery,Asp.net,Jquery Ui,Sitecore,我在sitecore中有一个子布局(它是一个ascx控件),其中包含一个隐藏字段和一个图像映射。根据单击的图像映射区域,我想设置隐藏字段的值,然后启动回发到服务器 我的标记如下: <script type="text/javascript"> function SetRegion(regionName) { $('#<%=hdnRegion.ClientID%>').val(regionName); __doPostBack('<%=lnkRedir

我在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...
    }
$('#MyDialog').dialog({
    closeOnEscape: true,
    open: function(event, ui) {
        $(this).parent().appendTo("form"); //this line sorted everything!
    }
}); 
我添加了虚拟LinkButton作为回发的挂钩(创建一个代码隐藏方法来处理回发)

我曾在一个独立的Web应用程序中尝试过这段代码,它似乎工作得很好,所以我想知道sitecore在回发过程中是否有什么事情正在扰乱隐藏字段的值

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

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

尝试使用ClientID而不是UniqueID


__doPostBack('','')

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

我发现这个问题() 这给了我答案,包括在dialog方法构造函数中的open:callback中添加一行代码

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

<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...
    }
$('#MyDialog').dialog({
    closeOnEscape: true,
    open: function(event, ui) {
        $(this).parent().appendTo("form"); //this line sorted everything!
    }
}); 

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

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

您尝试过吗?如果我使用ClientID而不是UniqueID,页面将回发,但不会调用我的LNKREDIRECTURN\u Click事件处理程序方法。我对ClientID使用相同的方法。我不知道为什么它对你不起作用。你的子布局上有子布局缓存吗?这会影响输出到页面的HTML。嗨,不,我不知道。不过,这提醒了我,在这种情况下,控件直接放在我的布局aspx上,而不是用作子布局。因此,如果将渲染ID硬编码到
\uu doPostBack()
函数中,它是否有效?我会尝试一下,但我的问题不是正确启动回发;这是因为隐藏字段的值在回发过程中丢失了。我会采取一步一步的方法。首先,正如您所做的那样,将ID硬编码到JS回发调用中,并使用VS调试器查看是否调用了
lnkRedirectButton\u Click()
。如果没有,则显示正在将ID传递到回发中,而不会导致LinkButton单击。如果调试器确实捕获了代码,并且您发现它确实运行了click方法,那么下一步就是如何访问HiddenField的值。把它分解成几个小步骤,看看哪一步它实际上没有按预期工作。啊,好主意。我会创建一个不可见的文本框,还是有更好的方法呢?我相信这只是_doPostBack()方法中的第二个参数。您应该只能够传递regionName,而不是空字符串。然后使用请求[“\uu EVENTARGUMENT”]访问它。我还没试过这个,所以我可能要走了。酷,这是有道理的。我将在星期一试一试!啊,谢谢你-我一直在试图弄清楚为什么我的jQuery UI对话框没有回发复选框字段。为了防止它对某人不起作用,这可能很有用:
$(“#divName”).parent().appendTo(jQuery(“form:first”)