我的网站运行在dotnetnuke 7.4上,我有一个checklist,我在页面加载时绑定,从中选择项目后,用户点击提交按钮,所选项目应保存在数据库中,但是当我点击提交按钮时,checklistbox变为空白,我试图在以下位置启用ViewState:
但是一切都是徒劳的,它仍然解开了checklistbox,因为一切都消失了,我在普通的.net中尝试了同样的东西,它就像一个魅力。
dotnetnuke中是否有任何特定设置支持viewstate,或者还有其他更好的选择来实现此目的。
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Entities objEntities = new Entities();
List<Entities> obj = objEntities.GetList(2);
chkBox.DataSource = obj;
chkBox.DataTextField = "Name";
chkBox.DataValueField = "ID";
chkBox.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
foreach (ListItem item in chkBox.Items)
Response.Write(item.Text + "<br />");
}
答案 0 :(得分:-1)
存在问题。在(!IsPostBack)
活动中删除page_load
项检查。让您的代码如下所示。否则,只有在第一页加载时才绑定数据源以控制在回发中丢失的数据。
protected void Page_Load(object sender, EventArgs e)
{
Entities objEntities = new Entities();
List<Entities> obj = objEntities.GetList(2);
chkBox.DataSource = obj;
chkBox.DataTextField = "Name";
chkBox.DataValueField = "ID";
chkBox.DataBind();
}
或者,更高效;将您的代码重构为如下方法,并将数据对象存储在Session
变量中,如
private void GetDataSource()
{
List<Entities> obj = null;
if(Session["data"] != null)
{
obj = Session["data"] as List<Entities>;
}
else
{
Entities objEntities = new Entities();
obj = objEntities.GetList(2);
}
chkBox.DataSource = obj;
chkBox.DataTextField = "Name";
chkBox.DataValueField = "ID";
chkBox.DataBind();
Session["data"] = obj;
}
在Page_Load
事件中调用此方法,例如
protected void Page_Load(object sender, EventArgs e)
{
GetDataSource();
}