SelectedIndex 在下拉列表(asp.net c#)中始终为 0

本文关键字:下拉列表 asp net SelectedIndex | 更新日期: 2023-09-27 18:37:20

我正在从下拉列表ddlTechnology 中的表Technology中检索数据。

我在表中TechnologyId作为主键,值为 1,2,3,4

现在根据技术,我必须在问题库中添加问题。 但是当我在下拉列表中选择任何项目时,我的SelectedIndex始终为 0。

我想从下拉列表中TechnologyId

我试过以下代码,但它不起作用

using (dbDataContext dt = new dbDataContext())
        {
            var qry = from i in dt.Technologies
                      select i;
            ddlTechnology.DataSource = qry;
            ddlTechnology.DataValueField = "TechnologyId";
            ddlTechnology.DataTextField = "TechnologyName";
            ddlTechnology.DataBind();
            ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
        }

添加按钮以根据所选技术添加问题。

protected void btnAdd_Click(object sender, EventArgs e)
{
    using (dbDataContext dt = new dbDataContext())
    {
        Question objQtn = new Question();
        objQtn.Question1 = txtQuestion.Text;
        objQtn.Option1 = txtOption1.Text;
        objQtn.Option2 = txtOption2.Text;
        objQtn.Option3 = txtOption3.Text;
        objQtn.Answer = txtAnswer.Text;
        // below here selectedIndex is always zero..
        objQtn.TechnologyId = ddlTechnology.SelectedIndex;
        dt.Questions.InsertOnSubmit(objQtn);
        dt.SubmitChanges();
        txtAnswer.Text = "";
        txtOption1.Text = "";
        txtOption2.Text = "";
        txtOption3.Text = "";
        txtQuestion.Text = "";
    }
}

SelectedIndex 在下拉列表(asp.net c#)中始终为 0

原因 1:

似乎您在每次回发时都绑定了下拉列表。如果这是一个问题,那么将加载代码保留在!IsPostBack shou 工作。

if(!IsPostBack)
{
   using (dbDataContext dt = new dbDataContext())
        {
            var qry = from i in dt.Technologies
                      select i;
            ddlTechnology.DataSource = qry;
            ddlTechnology.DataValueField = "TechnologyId";
            ddlTechnology.DataTextField = "TechnologyName";
            ddlTechnology.DataBind();
            ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
        }
}

原因2:

在某些情况下ViewState如果程序员禁用任何控件/页面的属性,则控件也会在回发时丢失其值。

需要在下面的事件中绑定下拉列表。

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    // Bind your dropdown list
  }
} 

请找到参考的代码。 希望它能帮助您:(objQtn.TechnologyId = ddlTechnology.SelectedIndex;) 这两个中的一个是字符串类型检查一次。

索引.aspx

    <asp:DropDownList ID="ddlCloth" runat="server"></asp:DropDownList>
    <asp:Button  runat="server" ID="btnSave" OnClick="btnSave_Click" />

索引.aspx.cs

         protected void Page_Load(object sender, EventArgs e)
         {
         if (!Page.IsPostBack)
         {

            DataTable dt1 = new DataTable();
            dt1.Columns.AddRange(new DataColumn[2] { new DataColumn("Id"), new DataColumn("Name") });
            dt1.Rows.Add(1, "Shirt");
            dt1.Rows.Add(2, "Jeans");
            ddlCloth.DataSource = dt1;
            ddlCloth.DataTextField = "Name";
            ddlCloth.DataValueField = "Id";
            ddlCloth.DataBind();
        }

    protected void btnSave_Click(object sender, EventArgs e)
    {

        int id = Convert.ToInt32(ddlCloth.SelectedItem.Value);
        string text = Convert.ToString(ddlCloth.SelectedItem.Text);
        int index=Convert.ToInt32(ddlCloth.SelectedIndex);
    }