3Layer C#asp.net:插入dropdownlist选中的文本和值

时间:2017-04-29 15:08:57

标签: c# asp.net

我有一个3层asp.net c#代码。我的BL:

    public DataTable ddl()
    {
        base.Link();
        string Query = "SELECT [nam], [idZone] FROM [zones] ORDER BY idZone";
        DataTable Output_Q = base.SelectDataText(Query);
        base.UnLink();
        return Output_Q;
    }
    public void insert()
    {
        base.Link();
        string Query = "INSERT INTO students (fnam, lnam, cod, idZone) VALUES ( '{0}', '{1}', '{2}', {3} )";
        Query = string.Format(Query, fnam, lnam, cod, idZone);
        base.commanddatatext(Query);
        base.UnLink();

我的代码:

    page_load:
    BL_students_new F = new BL_students_new();
    DropDownList1.Items.Clear();
    DropDownList1.DataSource = F.ddl();
    DropDownList1.DataTextField = "nam";
    DropDownList1.DataValueField = "idZone";
    DropDownList1.DataBind();

        btn_insert:
        BL_students_new F = new BL_students_new();
        F.fnam = TextBox1.Text.Trim();
        F.lnam = TextBox2.Text.Trim();
        F.cod = TextBox3.Text.Trim();
        F.idZone = Convert.ToInt32(DropDownList1.SelectedItem.Value);
        F.insert();

它保存了所有内容,但是下拉列表值。请注意我的ddl有text和int值,我需要保存值。但它失败了。 (我的DA也行。)

1 个答案:

答案 0 :(得分:1)

根据您的评论:

  

填充ddl在page_load中,插入在btn_insert

Page_Loadbtn_Insert之前发生This happens every time the page is requested,无论是"回发"或不。 (毕竟,页面必须加载到可用状态才能知道 HTTP请求的性质。)

所以发生了以下情况:

  1. 绑定DropDownList选项
  2. 向用户显示页面
  3. 用户选择一个选项并提交
  4. 重新绑定DropDownList选项,丢失用户选择的任何内容
  5. 插入数据库
  6. 在WebForms中解决此问题的一种简单方法是将DropDownList绑定逻辑包装在IsPostBack的条件中。像这样:

    // in Page_Load:
    if (!IsPostBack)
    {
        BL_students_new F = new BL_students_new();
        DropDownList1.Items.Clear();
        DropDownList1.DataSource = F.ddl();
        DropDownList1.DataTextField = "nam";
        DropDownList1.DataValueField = "idZone";
        DropDownList1.DataBind();
    }
    

    这样,您只会在最初请求页面时填充DropDownList,而不是在用户提交表单时填充。