【问题标题】:unable to persist data on postback in dotnetnuke7无法在 dotnetnuke7 中保留回发数据
【发布时间】:2016-01-01 20:19:04
【问题描述】:

我的网站在 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 />");
    }

【问题讨论】:

  • 你能在这里显示你的代码吗?
  • 我已经用代码更新了我的问题。

标签: asp.net viewstate checklistbox


【解决方案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();  
    }

【讨论】:

  • 感谢 Rahul 的及时回复: 1. 我已经在控件和页面级别启用了 ViewState,所以为什么需要会话,我能够在纯 .net 中维护视图状态,那么为什么不在 dotnetnuke 中,dotnetnuke 是否以不同方式处理视图状态。 2. 如果我在没有 IsPostback 的情况下使用会话保持数据绑定,我将在按钮单击时获得数据绑定,但是我选择的值呢,它将被下一个数据绑定覆盖,我将始终获得所有未选择的项目。跨度>
  • @Abbas,不确定.net nuke,但您必须在每次回发/页面加载时重新绑定控件;否则控件将丢失数据源,因为它是数据绑定控件。不过,您将不得不做一些单独的事情来保留以前的选择。
  • 我认为我不必在每个页面加载时都重新绑定,asp.net 通过 viewstate 处理它,我什至在纯 .net 中做到了,但这在 dotnetnuke 中不起作用,这就是我卡住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多