2012-04-04 5 views
2

У меня есть веб-сайт ASP.NET с чем-то подобным следующему коду:значение Keep после постбэка

.aspx

функции
<asp:UpdatePanel ID="UpdatePanel" runat="server"> 
    <ContentTemplate> 
     <table id="RatesTable"> 
      <tr> 
       <td>Hotel</td> 
       <td>&nbsp;</td> 
      </tr> 
      <tr id="NewRateRow"> 
       <td> 
        <asp:DropDownList ID="TxtHotel" runat="server" OnSelectedIndexChanged="TxtHotel_SelectedIndexChanged" AutoPostBack="true"> 
        </asp:DropDownList> 
       </td> 
       <td> 
        <a href="javascript:AddHotelPackRate()">Add</a> 
       </td> 
      </tr> 
     </table> 
    </ContentTemplate> 
</asp:UpdatePanel> 

AddHotelPackRate JS, считывает значение в выпадающем списке и " рисует "новую строку в начале таблицы, содержащую это значение. Проблема в том, что после этого, когда функция SelectIndexChanged выполняется снова, строка, добавленная до этого, теперь исчезает.

Есть ли способ избежать потери этого типа информации после обратной передачи?

+0

Вы должны добавить его снова (воссоздать) после обратной передачи, так что вы можете сохранить информацию, необходимую, чтобы воссоздать его в скрытом поле и читать эту информацию после того, как постбэк воссоздать дополнительный ряд , Однако возникает вопрос, действительно ли вам нужна обратная передача после изменения элемента, выбранного в раскрывающемся списке? Таким образом, это может быть более интуитивно понятным для пользователя, и вы могли бы избежать этой проблемы. –

+0

@ Лукас Мне нужна обратная передача, чтобы получить некоторую информацию из выбранного значения. Я подумал о том, чтобы сохранить информацию в скрытом поле, а затем воссоздать строки, проблема в том, что это не только одна ячейка, как в приведенном выше примере, а, в конце концов, будет сотни строк, и я определенно не хочу получать доступ к db после добавления каждой строки. Но я думаю, что другого решения нет. – Gonzalo

ответ

3

Вы должны будете добавить контент, добавленный JS внутри панели обновления, или вам нужно будет добавить все данные, добавленные JS-кодом в postback, чтобы он продолжал существовать, когда данные перерисовываются ,

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

Редактировать: еще один комментарий также подтверждает тот факт, что вы можете просто не обновлять панель обновления при изменении выбранного элемента, тем самым полностью исключая проблему (по-другому).

+0

. Требуется повторная передача, потому что мне нужно извлечь информацию из выбранного значения, чтобы я мог заполнять другие выпадающие списки в строке. Я с нетерпением ждал, чтобы избежать доступа к базе данных после создания каждой строки, но я думаю, что другого варианта нет. Благодаря! – Gonzalo

+0

Я не добавлял его сначала, потому что я просто предположил, что он существует по уважительной причине, но, если бы проверка на здравомыслие, что это действительно должно быть, это хорошо для будущих читателей. – Servy

+0

@anon downvoter, нужно объяснить? – Servy

-1

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

<asp:UpdatePanel ID="UpdatePanel" runat="server"> 
<ContentTemplate> 
    <table id="RatesTable"> 
     <tr> 
      <td>Hotel</td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr id="NewRateRow"> 
      <td> 
       <asp:DropDownList ID="TxtHotel" runat="server" OnSelectedIndexChanged="TxtHotel_SelectedIndexChanged" AutoPostBack="true"> 
       </asp:DropDownList> 
      </td> 
      <td> 
       <a href="javascript:AddHotelPackRate()">Add</a> 
      </td> 
     </tr> 
    </table> 
</ContentTemplate> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="TxtHotel" EventName="SelectedIndexChanged" /> 
</Triggers> 
</asp:UpdatePanel> 
+0

Проблема в том, что обновление updatepanel перезаписывает весь контент панели обновления, а сервер не знает об изменениях в javascript, поэтому они не сохраняются. Проблема заключается не в том, что у него есть полная обратная передача. – Servy

+0

@Servy - из того, что я понял, проблема в том, что при выполнении selectedindexChanged с автоповтором, установленным в true, будет удаляться сообщение и затем пустые текущие созданные строки. возможно, я понял неправильно. – Wahtever

+0

Проблема заключалась не в полном обратном обращении к страницам, а в обратном направлении корректно переходила панель обновления и делала все это в AJAX. Проблема в том, что обновление UpdatePanels данных вызывало у него проблемы. Ваш код будет делать то же самое, что и код в OP; проблема все равно будет существовать. – Servy

Смежные вопросы