jQuery-обновление asp: HiddenField не может быть сохранено при обратной передаче - PullRequest
3 голосов
/ 13 апреля 2011

У меня есть подслой в 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 для использования в качестве перехватчика для обратной передачи (чтобы создать метод выделенного кода для обработки обратной передачи).

Я пробовал этот код в автономном веб-приложении, и он, кажется, работает нормально, поэтому мне интересно, происходит ли что-то с sitecore, которое портит значение скрытого поля во время процесса обратной передачи?

уточнить;событие postback запускается и обрабатывается на сервере нормально, и я использовал alert () в javascript, чтобы подтвердить, что значение скрытого поля было установлено правильно.

Редактировать: Повторно помеченный вопрос для включения тега jquery-ui.Эта проблема, похоже, связана с тем, что все это происходит внутри div, который отображается с помощью метода $ (). Dialog () в библиотеке пользовательского интерфейса jQuery ...

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

Как упоминалось в моем редактировании, эта проблема связана с тем, что скрытое поле (и все остальное) находится внутри элемента div, которым манипулируют с помощью метода диалога jQuery UI для создания всплывающего окна.

Я нашел этот вопрос ( Значение HiddenField, измененное javascript, не отправлено обратно ), которое дало мне ответ и включает добавление одной строки кода к обратному вызову open: в конструкторе методов диалога.

Мой код JavaScript для открытия диалогового окна был изменен следующим образом:

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

Цитировать DanaBenson"Я считаю, что основная причина в том, что jQueryUI прикрепляет диалоги к тегу BODY, а не к тегу FORM, где .Net это нужно. "

1 голос
/ 15 апреля 2011

Почему бы не передать значение обратно в качестве параметра обратной передачи вместо скрытого значения поля, поскольку вы просто выполняете немедленную обратную передачу?

0 голосов
/ 13 апреля 2011

Попробуйте использовать ClientID вместо UniqueID

__ doPostBack ('<% = lnkRedirectButton.ClientID%>', '');

...