【问题标题】:DropDownList Control asp.net SelectedValueDropDownList 控件 asp.net SelectedValue
【发布时间】:2018-05-09 07:06:23
【问题描述】:

我正在使用 DropdownList 控件...首先,我使用此代码在 Page_Load() 中绑定下拉控件

   combo.DataSource = ds3.Tables[0];//combo is the ID of DropDownList Control
            combo.DataTextField = ds3.Tables[0].Columns["ProjectName"].ColumnName.ToString();
            combo.DataValueField = ds3.Tables[0].Columns["ID"].ColumnName.ToString();
            combo.DataBind();

然后我使用此代码在按钮单击中使用选定的值

   protected void btn_newUser_Click(object sender, EventArgs e)
    {


    cmd1 = new SqlCommand("SP_createUserFroProjects", con);
    cmd1.CommandType = CommandType.StoredProcedure;
    int m =Convert.ToInt32( combo.SelectedValue);
    cmd1.Parameters.AddWithValue("@projectID",m);
    cmd1.Parameters.AddWithValue("@userName", txt_User.Text);
    cmd1.Parameters.AddWithValue("@password", txt_pass.Text);
    cmd1.Parameters.AddWithValue("@name", txt_User_Name.Text);

    ds4 = new DataSet();
    adpt4 = new SqlDataAdapter(cmd1);
    adpt4.Fill(ds4);

当我在检查页面时检查结果 int m 始终等于 1 时,html 是

<select name="combo" id="combo">
    <option selected="selected" value="1">project1</option>
    <option value="2">project2</option>
    <option value="3">project3 </option>
    <option value="4">project4 </option>
    <option value="5">lubdbsljv</option>
    <option value="10">project5</option>
    <option value="1018">test4</option>
    <option value="1019">test5 </option>
    <option value="1020">test6</option>
    <option value="1021">test7</option>
    <option value="1022">testtt</option>
    <option value="1023">new</option>
    <option value="1024">new2</option>
    <option value="1025">new5</option>
    <option value="1026">next</option>
    <option value="1027">new nnn</option>
    <option value="1028">ttttt</option>
    <option value="1029">new project 5 </option>
    <option value="1030">newprj</option>
    <option value="1031">projectnewtest</option>

</select>

但它总是从按钮单击中的选定值发送第一个值

【问题讨论】:

  • 在您发布的 HTML 中,“已选择”选项显示为 1,对应于您获得的值。
  • 这里的问题是,在每次页面加载时他都在投标 DropDownList ,而不是检查页面的 isPostBack 属性。试试我在下面给出的解决方案。它会解决问题。

标签: c# asp.net


【解决方案1】:

在你的代码文件页面加载方法中试试这个。

if (!Page.IsPostBack)
    {
        combo.DataSource = ds3.Tables[0];//combo is the ID of DropDownList Control
        combo.DataTextField = "ProjectName";
        combo.DataValueField = "ID";
        combo.DataBind();
    }

【讨论】:

  • 始终将数据绑定方法保留在 IsPostBack 检查中。它避免了重新绑定 PostBacks 上的控件。
【解决方案2】:

在您的 Page_Load 方法中,如果您不检查它是否是回发,则每次您单击按钮或回发页面的任何其他控件时,都会执行填充组合框的代码。

这意味着每次单击按钮时,组合框填充将被填充,所选索引将为 0,所选值将成为列表的第一个值。

你应该像这样检查:

private void Page_Load()
{

 // The code here will execute on every postback (button click etc..).

  if (!IsPostBack)
   {
      //The code will execute if the page load        
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2013-05-23
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多