2012-06-22 57 views
0

我需要修改3級下拉菜單<select>直接在頁面上運行,而不是在iframe內部(這是我們目前的做法)。動態ASP形式後 - 不使用iframe

下面這個菜單是如何工作的:

  1. 用戶在第一次下拉菜單選擇

  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控件。我希望你已經在使用這些,如果不能將你的選擇轉換爲下拉列表。