2015-09-23 2 views
0

У меня есть простой элемент управления Dropdownlist, который обрабатывает JS, после изменения индекса, div открывается/закрывается.Asp.net - Postback теряет индекс раскрывающегося списка

HTML код для инициализации Dropdownlist-

<select id="selectmethod" onchange="run()"> 
     <option value="1" selected="selected">option1</option> 
     <option value="2" >option2</option> 
    </select> 

JavaScript код для обработки OnChange событийно

 function run() { 
      var e = document.getElementById("selectmethod"); 
      var value = e.options[e.selectedIndex].value; 

      if (value == 1) { 

       $('#changecourseitems').slideUp(); 
       $('#addnewcourseitems').slideDown(); 
      } 
      if (value == 2) { 

       $('#addnewcourseitems').slideUp(); 
       $('#changecourseitems').slideDown(); 

      } 

Теперь, когда пользователь нажимает на <ASP:LinkButton ... /> начинается, событие Postback и индекс возвратов списка пункт (так что скрытый div). Как сохранить индекс Dropdownlist после обратной передачи?

Спасибо!

+0

вам необходимо поддерживать индекс DROPDOWNLIST ли ? Обычно ASP.NET позаботится об этом. Если вы хотите, чтобы ваш открытый/закрытый div поддерживал свое состояние, это еще один вопрос. –

+0

Ну, я описал это в сообщении, но ASP.NET не заботится о индексе dropdownlist, потому что он сбрасывается каждый раз, когда я нажимаю Linkbutton. – Yakirbu

+0

У вас есть что-то в коде, которое устанавливает индекс выпадающего списка? –

ответ

1

Чтобы сохранить содержимое выпадающего списка, вам необходимо либо повторно заполнить его на сервере каждый раз, либо использовать viewstate. Например, вы можете заполнить данные после того, как этот

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     DropDownList1.Items.Add(new ListItem() { Text = "option1", Value = "1", Selected = true }); 
     DropDownList1.Items.Add(new ListItem() { Text = "option2", Value = "2" }); 
    } 
} 

и на странице вы можете использовать элемент управления ASP и включить состояние просмотра:

<asp:DropDownList ID="DropDownList1" runat="server" EnableViewState="true"> 
</asp:DropDownList> 

Теперь данные будут размещены взад и вперед и будет поддерживаться на стороне клиента

1

Для поддержания ценности существует несколько подходов. 1. Измените элемент управления select на сервер.
2. Добавьте скрытое значение и сохраните значение выбранного тега в этом скрытом значении в вашем run(). Затем установите значение в документе document.ready().

<asp:HiddenField ID="yourHiddenValue" runat="server" /> 

Ваш метод прогона.

function run() { 
    var e = document.getElementById("selectmethod"); 
    var value = e.options[e.selectedIndex].value; 

    if (value == 1) { 

     $('#changecourseitems').slideUp(); 
     $('#addnewcourseitems').slideDown(); 
    } 
    if (value == 2) { 

     $('#addnewcourseitems').slideUp(); 
     $('#changecourseitems').slideDown(); 

    } 

    $('#<%=yourHiddenValue.ClientID%>').val(value); // <--- added 
}   

Это готовая документация.

$(function() { 
    var hiddenValue = $('#<%=yourHiddenValue.ClientID%>').val(); 
    $('#selectmethod').val(hiddenValue); 
} 
+0

Но div «changecourseitems» продолжает закрываться каждый раз, когда я нажимаю кнопку linkbutton, я хочу, чтобы он оставался открытым, поскольку он должен быть открыт в индексе 2 в списке. – Yakirbu

+0

Возможно, вам нужно применить логику (показать/скрыть) в функции готовности документа. – g2000

0

Если вы хотите, чтобы сохраняться состояние элемента управления в ASP.Net веб-формы, вы хотите использовать Контроль сервера DropDownList, который использует ViewState под капотом.

<asp:DropDownList runat="server" ID="DropDownList1"> 
    <asp:ListItem Text="Add New Course" Value="1" /> 
    <asp:ListItem Text="Change Course" Value="2" /> 
</asp:DropDownList> 

<div id="changecourseitems">Change course</div> 
<div id="addnewcourseitems">Add new course</div> 

<asp:LinkButton ID="LinkButton1" runat="Server" OnClick="LinkButton1_Click" 
    Text="Submit" /> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     var selectMethod = function(){ 
      if ($('#<%= DropDownList1.ClientID %>').val() === '1') { 
       $('#changecourseitems').hide(); 
       $('#addnewcourseitems').slideDown(); 
      } else { 
       $('#addnewcourseitems').hide(); 
       $('#changecourseitems').slideDown(); 
      } 
     } 
     $('#<%= DropDownList1.ClientID %>').change(selectMethod); 
     selectMethod(); 
    }); 
</script> 
+0

Я попытался точно указать, как вы упомянули, и поддерживает индекс списка, но он все равно закрывает div, который должен был быть открыт, пока индекс равен 2 (например). Я хочу, чтобы он поддерживал индекс, но также поддерживал вид div. – Yakirbu

0
<asp:DropDownList ID="selectmethod" ClientIDMode="Static" runat="server" EnableViewState="true"> 
    </asp:DropDownList> 

С ClientIDMode = статический вы поддерживаете идентификатор, как это указать на управление

файл JS должен быть:

$('#selectmethod').change(function() { 
    var value = $(this).val(); 

    if (value == 1) { 

     $('#changecourseitems').slideUp(); 
     $('#addnewcourseitems').slideDown(); 
    } 
    if (value == 2) { 

     $('#addnewcourseitems').slideUp(); 
     $('#changecourseitems').slideDown(); 

    } 
    }); 
Смежные вопросы