我有一个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/