Скрытое поле теряет свою ценность при обратной передаче - PullRequest
3 голосов
/ 07 июня 2010

У меня есть страница ascx, где я использую скрытое поле для хранения значения раскрывающегося списка, поскольку оно генерируется с помощью искателя адресов Google. Моя проблема в том, что когда я пытаюсь сохранить значение непосредственно в скрытом поле:

hfDdlVerifyID.Value = ddlVerifySS.SelectedValue;

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

getBuild.AppendLine("$get('" + hfDdlVerifyID.ClientID + "').value = $get('" + ddlVerifySS.ClientID + ").value;");

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "storeHidden", getBuild.ToString(), true);
//  Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "storeHidden", getBuild.ToString(), true);
string test = hfDdlVerifyID.Value.ToString();

Страница ascx:

<asp:UpdatePanel ID = ddlUpdate runat="server">
    <ContentTemplate>
         <asp:Panel ID="pVerify" runat="server">
             <br />
             <fieldset>
                 <legend>
                     <asp:Literal ID="lVerify" runat="server" />
                 </legend>
                 <asp:CheckBox
                     ID      ="cbVerify"
                     runat   ="server"
                     Text    ="Use the value from the following list, (Uncheck to accept address as it is)."
                     Checked ="true" />
                 <br />
                 <asp:DropDownList ID="ddlVerifySS" runat="server"
                     onselectedindexchanged="ddlVerifySS_SelectIndexChange" />
                 <asp:HiddenField id="hfDdlVerifyID"
                     runat   ="server" /> 
             </fieldset>
         </asp:Panel>  
     </ContentTemplate>
 </asp:UpdatePanel>

 <padrap:Button          ID          ="bVerify"
                         runat       ="server"
                         CssClass    ="btn"
                         OnClick     ="bVerify_Click"
                         Text        ="Verify Address" />

 <asp:Button             ID          ="btnSubSite" 
                         runat       ="server" 
                         text        ="Save"
                         CssCLass    ="btn" 
                         OnClick     ="save_btn_Click_subSite" 
                         onLoad="ddlVerify_Load" />

Ответы [ 6 ]

2 голосов
/ 01 апреля 2012

Кнопка asp, которая вызывает вызов ajax, должна находиться на панели ajax.Вставьте кнопку в панель обновлений и попробуйте снова.Я надеюсь, что вы получите значение скрытого поля.

1 голос
/ 06 июня 2011

Обычно, когда у меня возникают проблемы, подобные этой (после обратной отправки я потерял данные), я заканчиваю, обнаружив, что забыл поставить функцию, где я сбрасываю данные в поля внутри if(!IsPostback)

1 голос
/ 03 июня 2011

Вы должны рассмотреть возможность использования Viewstate. Надеюсь, это поможет

http://msdn.microsoft.com/en-us/library/bb386448.aspx#Y2000

0 голосов
/ 14 февраля 2012

У меня была такая же проблема несколько недель назад. Я решил это с помощью текстового поля и CSS. Попробуйте использовать отображение свойств asp: TextBox и CSS: нет;

Это только мое предложение, и оно мне помогло.

Надеюсь, это поможет вам!

0 голосов
/ 11 мая 2011

В прошлом у меня были довольно сложные веб-страницы, которые интенсивно использовали Ajax. Мне нравится HiddenFields из-за простоты использования и intellisense. В одном случае недавно я обнаружил, что, как и вы, мой HiddenField терял ценность для постбэков. Так что я немного обманул ... Я использовал событие HiddenFields Init и событие Unload, чтобы инициализировать и зафиксировать его значение в сеансе. Лучшим решением было бы либо исправить причину потери состояния, либо перейти в сеанс. Я использовал это значение для манипулирования свойством Multiview ActiveViewState в куче разных областей и не хотел перепрограммировать или выполнить детальную трассировку отладки. Время было проблемой.

Protected Sub HiddenFieldActiveView_Init(sender As Object, e As System.EventArgs) Handles HiddenFieldActiveView.Init
  If Not Page.IsPostBack Then
    HiddenFieldActiveView.Value = "0"
  Else
    HiddenFieldActiveView.Value = CStr(Session("ActiveViewIndex"))
  End If
End Sub

Protected Sub HiddenFieldActiveView_Unload(sender As Object, e As System.EventArgs) Handles HiddenFieldActiveView.Unload
    Session.Add("ActiveViewIndex", HiddenFieldActiveView.Value)
End Sub

Таким образом, при первой загрузке страницы HiddenField инициализируется значением 0, а затем при последующих инициализациях загружает значение из сеанса.

Возможно, это не самое красивое и умное решение. Но это сработало для моей ситуации.

~ Ian

0 голосов
/ 11 октября 2010

Работает ли этот код при удалении UpdatePanel?

Кроме того, в коде, который вы опубликовали для вызова getBuild, отсутствует закрывающая одинарная кавычка в вызове $ get для элемента ddlVerifySS.ClientID.Это опечатка, введенная здесь, или проблема в вашем коде?Если это последнее, это объясняет, почему вы не видите скопированное значение при использовании диспетчера сценариев.

...