我有一个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();


它保存除dropdownlist值以外的所有内容。请注意,我的ddl具有text和int值,我需要保存该值。但是失败了。 (我的DA也可以。)

最佳答案

根据您上面的评论:


  填充ddl在page_load中,插入在btn_insert中


Page_Load发生在btn_Insert之前。 This happens every time the page is requested,无论它是否是“回发”。 (毕竟,页面必须先加载到可用状态,然后才能知道HTTP请求的性质。)

因此,发生了以下情况:


绑定DropDownList选项
向用户显示页面
用户选择一个选项并提交
重新绑定DropDownList选项,丢失用户选择的任何内容
插入数据库


在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,而不是在用户提交表单时填充。

关于c# - 3 Layer C#asp.net:插入下拉列表选择的文本和值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43697196/

10-11 22:20
查看更多