Как получить текущий элемент в Dropdownlist для ASP.NET

1

Мой код проекта:

<asp:DropDownList ID ="DropDownList1" runat="server" EnableViewState="true"  AutoPostBack ="true" CssClass="ddl" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryId" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>

Код С#:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Response.Redirect("Products.aspx?catId=" + DropDownList1.SelectedValue);
    }

В таблице категорий базы данных:

Book 1
Movie 2
Game 3
Music 4

Книга всегда является текущим элементом выпадающего списка. когда я выбираю другие, их загружает страницы, но текущее значение dropdownlist - это книга и страница справки "can'response".

Теги:

3 ответа

0
Лучший ответ

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

ASPX

<asp:DropDownList  OnDataBound="DropDownList1_DataBound" ...

С#

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
   if(!IsPostBack){
     string selectedValue = Request.QueryString["catId"];
     if(!string.IsNullOrEmpty(selectedValue))
       DropDownList1.SelectedValue = selectedValue;
   }
}
  • 0
    таким образом, он продолжает копировать БД и связываться снова и снова
  • 0
    конечно он будет, его редирект!
Показать ещё 4 комментария
0

Я думаю, что проблема в том, что список связывается с SqlDataSource при каждой обратной передаче, поэтому вы всегда получаете значение первого элемента.

Чтобы убедиться в этой проблеме, измените порядок выбора на DESC и посмотрите, всегда ли вы получаете последний элемент.

измените, что вы SQL

SELECT * FROM [Categories] ORDER BY CategoryId DESC

И посмотрите, всегда ли вы получаете 4.

Если это проблема, вам нужно привязать список по коду всегда в пределах загрузки страницы, как показано ниже:

if(!Page.IsPostback)
{
    // code here
}
  • 0
    Я думаю, что вы поняли это неправильно, поскольку ОП говорит: «когда я выбираю других, их страницы загружаются, но текущее значение выпадающего списка - книга», он получает выбранное значение правильно, и после перенаправления выпадающий список возвращается к первому элементу.
0

Вы можете попробовать два подхода. Или переместите выпадающий код заполнения в Page_Load и инкапсулируйте код с помощью

if(!Page.IsPostBack)
{
  //your code
}

или

<%
if(!Page.IsPostBack)
{ %>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>
<%}
%>
  • 0
    вам не хватает <% %> , ваш ответ не имеет смысла без них
  • 0
    @Ted это просто фрагмент кода. во всяком случае, я редактировал это
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню