2016-04-27 3 views
0

Вот моя проблема:Как предотвратить обновление UpdatePanel вне панели?

  1. я выбираю тип с помощью ddlType
  2. я нажимаю на btnAddChoice, чтобы добавить несколько вариантов
  3. я нажимаю на btnSubmit, чтобы сохранить форму

Но когда Я пытаюсь получить ddlType.SelectedValue в btnSubmit_Click(), он всегда возвращается к «Выбрать тип».

Если я не делаю шаг №2, то он отлично работает. Из того, что я понимаю, проблема связана с вызовом ajax (postback) и может быть решена путем сохранения SelectedValue в сеансе или ViewState.

Но на этой странице есть много других элементов управления (например, ddlType), поэтому это не похоже на элегантное решение. Я надеялся, что структура сохранит выбранные значения в ViewState автоматически ... Любая идея? В конце концов, не является ли целью UpdatePanel обновлять только панель?

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<asp:DropDownList ID="ddlType" runat="server"> 
    <asp:ListItem Text="Select a type" Value=""></asp:ListItem> 
    <asp:ListItem Text="One" Value="1"></asp:ListItem> 
    <asp:ListItem Text="Two" Value="2"></asp:ListItem> 
    <asp:ListItem Text="Three" Value="3"></asp:ListItem> 
</asp:DropDownList> 

<div> 
    <strong>Choices</strong> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnAddChoice" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <ul class="list-unstyled"> 
       <asp:PlaceHolder runat="server" ID="phChoices"></asp:PlaceHolder> 
      </ul> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Button ID="btnAddChoice" runat="server" Text="Add Choice" CausesValidation="false" 
      OnClick="btnAddChoice_Click" /> 
</div> 

<asp:Button ID="btnSubmit" runat="server" Text="Add question" 
          OnClick="btnSubmit_Click" /> 

UPDATE

Часть проблемы была вызвана:

$('#<%= MainPanel.FindControl("btnAddChoice").ClientID %>').click(function() { 
    var ddlType = $('#<%= MainPanel.FindControl("ddlType").ClientID %>'); 
    ddlType.attr('disabled', 'disabled'); 
}); 

Пожалуйста, ознакомьтесь question для деталей. Что касается других элементов управления также пустые, причина в том, что "dynamically created controls have to be created each and every post-back"

+0

где Ур 'ScriptManage r'? – BNN

+0

ok Я добавил его к фрагменту (стараюсь держать его коротким) –

+0

Так что, в основном, вы не хотите обновлять всю страницу? это правильно ? – BNN

ответ

0

Попробуйте добавить что-то вроде этого, чтобы ваш ScriptManager

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 

Тогда весь код, который вы хотите получить обновилась придут под Update Panel

<asp:Updatepanel id="UpdatePanel1" runat="server"> 
 
     <ContentTemplate> 
 
...All your HTML content here 
 
</ContentTemplate> 
 
    </asp:Updatepanel>

Надежда, что помогает

Более подробную информацию о EnablePartialRendering

UPDATE

Кроме того, если ваше значение dropdownlist не получает сохранено из Updatepanel

попробовать Request.Form и проверить

Request.Form.Get("dropdownlistID").ToString()); 
+0

спасибо ... Я пробовал, но у меня такая же проблема (btw Я думаю, что значение по умолчанию EnablePartialRendering истинно) –

+0

может уставить код, который вы пытались [здесь] (https://jsfiddle.net/) Я также могу проверить – BNN

+0

Ваше значение, которое выбрано, не сохраняется правильно? – BNN