2012-06-22 4 views
0

Мне нужно изменить 3-уровневое выпадающее меню <select>, чтобы функционировать непосредственно на странице, а не внутри iframe (так мы это делаем в настоящее время).Dynamic ASP Form Post - без использования iframe

Вот как это работает меню:

  1. Пользователь делает выбор в 1-ом раскрывающемся меню

  2. выбор во 2-ом раскрывающемся списке фильтруются на том, что выбран в 1-ый; пользователь выбирает один из этих вариантов

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

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

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

ответ

0

Если вы открыты для использования ASP.NET Ajax Toolkit, у них есть cascading dropdown control, который делает то, что вы просите. Еще одно преимущество, поскольку он использует Ajax, ему не нужно перезагружать страницу после каждого выбора в выпадающих меню.

0

Я думаю, вам, вероятно, придется использовать «onSelectIndexChanged» даже в элементе управления DropDownList. что-то вроде ...

<asp:DropDownList id="ddl1" runat="server" OnSelectedIndexChanged="ddl1_OnSelectedIndexChanged"></asp:DropDownList> 
<asp:DropDownList id="ddl2" runat="server" OnSelectedIndexChanged="ddl2_OnSelectedIndexChanged"></asp:DropDownList> 
<asp:DropDownList id="ddl3" runat="server" OnSelectedIndexChanged="ddl3_OnSelectedIndexChanged"></asp:DropDownList> 

Page_Load() 
{ 
    if(!IsPostBack) 
    { 
     ddl1.DataSource = getdata(); 
     ddl1.DataBind(); 
} 

protected void ddl1_onSelectedIndexChanged(object sender, EventArgs e) 
{ 
    ddl2.DataSource = getData(ddl1.SelectedValue); 
    ddl2.DataBind() 
} 
protected void ddl1_onSelectedIndexChanged(object sender, EventArgs e) 
{ 
    ddl3.DataSource = getData(ddl2.SelectedValue); 
    ddl3.DataBind() 
} 
protected void ddl3_onSelectedIndexChanged(object sender, EventArgs e) 
{ 
    Response.Redirect("SomePage.aspx?ddl1="+ddl1.SelectedValue+"&ddl2="+ddl2.SelectedValue+"&ddl3="+ddl3.SelectedValue, true); 
} 
+0

Я уверен, что он уже делает это. Его проблема частично освежает страницу, не меняя ее. – nunespascal

0

Вы можете поместить все 3 из них в UpdatePanel.

Я уверен, что ваши изменения уже делают обновление страницы. Ввод их в панель обновления сделает только обновление панели, что приведет к частичному обновлению страницы.

Это использует ajax для выполнения внутренней работы.

Вот update panel example, если хотите.

P.s .: Метод Asp.net для создания <select> - это элемент управления DropDownList. Я надеюсь, что вы уже используете их, если не конвертируете свои избранные в dropdownlists.