我有一个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也行。)
答案 0 :(得分:1)
根据您的评论:
填充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
,而不是在用户提交表单时填充。