2012-06-07 43 views
0

我是ASP.NET的新手,並且遇到了在靜態DropDownList中獲取所選項目的問題。這是我的列表的結構:ASP.NET和C# - 獲取靜態DropDownList中的選定項目

    <asp:DropDownList ID="txtGender" runat="server"> 
          <asp:ListItem>Male</asp:ListItem> 

          <asp:ListItem>Female</asp:ListItem> 

          <asp:ListItem>Other</asp:ListItem> 

          <asp:ListItem>Rather not say</asp:ListItem> 
        </asp:DropDownList> 

然後在我想選擇的項目的代碼,我用txtGender.SelectedItem始終得到第一個項目作爲輸入。我有另一個DropDownList,我必須從數據庫中獲取項目,然後在調用DataBind()之前使用IsPostBack,它工作正常。所以我想知道如何在靜態DropDownList中使用IsPostBack?請幫忙。

* EDITED

下面是方法,我用txtGender

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    int uID= int.Parse(Session["uID"].ToString()); 
    PhotoDataSetTableAdapters.MembersTableAdapter memAdap = new PhotoDataSetTableAdapters.MembersTableAdapter(); 
    PhotoDataSet.MembersDataTable memTable = memAdap.GetMemberByID(uID); 

    DataRow[] dr = memTable.Select("userID = " + uID); 
    string Fname = memTable.AsEnumerable().Single().Field<String>("avatar"); 
    if(PhotoUploader.HasFile) 
    { 
     Fname = Path.GetFileName(PhotoUploader.FileName); 
     PhotoUploader.SaveAs(Server.MapPath("~/avatar/") + Fname); 
    } 

    string newPass = memTable.AsEnumerable().Single().Field<String>("password"); 
    if (txtPass.Text != "") 
    { 
     newPass = txtPass.Text; 
    } 

    string tmp = txtBday.Text; 
    DateTime bday = DateTime.ParseExact(tmp, "dd/MM/yyyy", null); 

    memAdap.UpdateMemberProfile(newPass, txtEmail.Text, txtRealname.Text, txtLocation.Text, txtGender.SelectedItem.Text, txtBio.Text, bday, Fname, uID); 
    //Response.Write(txtGender.SelectedItem.Text + " " + txtBio.Text); 
    Response.Redirect("Photostream.aspx"); 
} 

PS:我嘗試使用Response.Write看社會性別問題的輸入,但它總是列表的第一個項目被選中。即使一切看起來都沒問題,我也沒有輸入txtBio

+2

你應該命名你的DropDownList'ddlGender'或者只是'gender'。 'txtGender'令人困惑。 –

+0

請發佈您用於獲取靜態「DropDownList」的值的方法。 –

+0

我用使用'DropDownList'的方法編輯了問題。你現在可以檢查它。 –

回答

1

如果您不重新選擇下拉列表的選項,並且您在回發時未重置其實際值,則不應該對IsPostBack執行任何操作。你應該能夠做到以下幾點來獲取值和文本:

string value = txtGender.SelectedValue; 
string text = txtGender.SelectedItem.Text; 

注:Page_Init期間控制的實際價值將不可用,因爲在頁面尚未完全初始化。

-1

綁定頁面加載下拉列表並檢查IsPostBack屬性

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     // Dropdown binding code goes here.... 
    } 
} 
+0

是的,我知道,但由於我使用靜態列表,我不知道如何綁定它(抱歉,如果我聽起來啞巴)。你能舉個例子嗎? –

+0

@pinkcupcake綁定下拉列表是向其中添加選項的過程。在你的場景中,這些選項是靜態聲明的,所以你不必擔心綁定它或使用IsPostBack。 –

0

您需要分配唯一值在你的DropDownList的時listItems:

<asp:DropDownList ID="txtGender" runat="server"> 
     <asp:ListItem Value="0">Male</asp:ListItem> 

     <asp:ListItem Value="1">Female</asp:ListItem> 

     <asp:ListItem Value="2">Other</asp:ListItem> 

     <asp:ListItem Value="3">Rather not say</asp:ListItem> 
</asp:DropDownList> 

試試這個,看看是否有幫助。

相關問題