无法在dotnetnuke7中保留回发数据

时间:2016-01-01 20:19:04

标签: asp.net viewstate checklistbox

我的网站运行在dotnetnuke 7.4上,我有一个checklist,我在页面加载时绑定,从中选择项目后,用户点击提交按钮,所选项目应保存在数据库中,但是当我点击提交按钮时,checklistbox变为空白,我试图在以下位置启用ViewState:

  1. Web.config级别
  2. 页面级别
  3. 控制级别
  4. 但是一切都是徒劳的,它仍然解开了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 />");
        }
    

1 个答案:

答案 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();  
    }