2011-07-03 77 views
1

我使用後臺代碼動態綁定我的下拉列表,當用戶更改下拉列表並提交購買時,selectedvalue始終爲空。asp.net - 獲取下拉列表的問題

我試過ddl.SelectedItem.ToString();和ddl.SelectedValue.ToString();但沒有工作。同樣對於這兩個代碼隱藏在下面的函數中,我似乎無法使用void方法而不是使用需要返回值和參數的函數,是否有使用無參數的void方法?任何建議表示讚賞。

謝謝。

<%# FormattedSize((string)Eval("Size")) %> 
<%# FormattedGetSize((string)Eval("Size")) %> 

在線:

<asp:DropDownList ID="DropDownList1" runat="server" OnDataBinding='<%# FormattedSize((string)Eval("Size")) %>'></asp:DropDownList> 

<a href='AddToCart.aspx?CategoryId=<%# Eval("CategoryId") %>&&ProductId=<%# Eval("ProductId") %>&&Size=<%# FormattedGetSize((string)Eval("Size")) %>' style="border: 0 none white;"> 

代碼背後:

protected string FormattedSize(string size) 
    { 
     if (size.Contains("s")) 
     { 
      DropDownList ddl = (DropDownList)FormView_Product.Row.Cells[0].FindControl("DropDownList1"); 
      ddl.Items.Add("S"); 
     } 

    if (size.Contains("m")) 
    { 
     DropDownList ddl = (DropDownList)FormView_Product.Row.Cells[0].FindControl("DropDownList1"); 
     ddl.Items.Add("M"); 
    } 

    if (size.Contains("f")) 
    { 
     DropDownList ddl = (DropDownList)FormView_Product.Row.Cells[0].FindControl("DropDownList1"); 
     ddl.Items.Add("Freesize"); 
    } 
    return null; 
} 

protected string FormattedGetSize(String Size) 
{ 
    DropDownList ddl = (DropDownList)FormView_Product.Row.Cells[0].FindControl("DropDownList1"); 
    string selectedSize = ddl.SelectedItem.ToString(); 
    return selectedSize; 
} 

回答

1

爲什麼它不工作的原因是因爲...... 「你這樣做是錯誤的」 。您期望<a href=..將根據用戶交互進行更改,但是在用戶收到頁面時已經生成。如果您希望鏈接來改變基礎上,下拉菜單,你必須有兩種:

  1. 上下拉選擇回傳,那麼鏈接會改變...
  2. 你可以改變href一些JavaScript通過附加下拉選擇事件
+0

嗨,我設置ddl的AutoPostBack爲true,但它沒有工作。有什麼建議? – k80sg

+0

是的。無論你將數據分配給下拉列表,只需要「if(!IsPostBack)」,否則無論你在viewstate中有什麼被覆蓋。 – ub1k

0

你在你的Page_Load方法中做了什麼?您是否檢查當前請求是否回發(使用IsPostBack)? 如果是這樣,請檢查IsPostBack並僅在Get請求上將DropDownList綁定到基礎數據源。