0

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

  1. Web.config 级别
  2. 页面级别
  3. 控制水平

但一切都是徒劳的,它仍然解除了复选框的绑定,因此一切都消失了,我在普通的 .net 中尝试了同样的方法,它就像一个魅力。

dotnetnuke 中是否有任何特定设置来支持视图状态,或者是否有其他更好的选择来实现这一点。

这是我的代码:

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 />");
    }
4

1 回答 1

-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();  
    }
于 2016-01-01T20:58:46.143 回答