ASP.NET 和 C# - 获取静态下拉列表中的选定项
本文关键字:下拉列表 静态 NET 获取 ASP | 更新日期: 2023-09-27 18:36:35
我是 ASP.NET 新手,在静态下拉列表中获取所选项目时遇到问题。这是我的列表结构:
<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
并且它工作正常。所以我想知道我应该如何在上面的静态下拉列表中使用IsPostBack
?请帮忙。
*已编辑
以下是我使用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
输入,即使一切似乎都很好。
如果不重新绑定下拉列表的选项,并且未在回发时重置其实际值,则不必对IsPostBack
执行任何操作。您应该能够执行以下操作来获取值和文本:
string value = txtGender.SelectedValue;
string text = txtGender.SelectedItem.Text;
注意:控件的实际值在Page_Init期间将不可用,因为页面尚未完全初始化。
您需要为 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>
试试这个,看看是否有帮助。
在
页面加载时绑定下拉列表并检查 IsPostBack 属性
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Dropdown binding code goes here....
}
}