【问题标题】:.net c# postback overwrites bound textbox.net c#回发覆盖绑定的文本框
【发布时间】:2010-12-08 13:44:25
【问题描述】:

我有一个 gridview,其内容由 accessdatasource 提供,显示的数据取决于具有回发事件的下拉列表

  • 页面加载
  • 用户从下拉列表中选择一个项目
  • 在网格视图中使用新数据重新加载页面

到目前为止一切顺利

然后我在网格视图中添加了一个文本框(不,我不能使用标准的“编辑”链接) 文本框位于项目模板中

此文本框包含可编辑的数据,用户只需单击更新按钮即可更新并发送回服务器。

问题是,如果我更改下拉菜单中的选择,gridview 会按原样更新,但文本框保留旧值,即使它们与

绑定

我只能假设这是由回发数据引起的,并且数据在绑定发生后被覆盖。 (否则绑定会覆盖旧的不需要的数据)

谁能解释我如何改变这种行为。

viewstate 设置为 false

我是 .net 和 c# 的新手

直流

进一步的发展..

如果我将 " ... > 网格将完全按预期工作。

问题似乎是当数据被绑定时,gridview 填充了它的子控件,但是即使它的视图状态被禁用,文本框也会用发布的内容(通过下拉菜单上的回发事件)覆盖它。

【问题讨论】:

  • 根据我在这里阅读的内容,听起来我们仍然没有足够的信息来回答您的问题。当用户单击更新按钮时会发生什么?您是否验证了更新按钮的 Click 事件处理程序中的代码正在触发?如果是这样,该代码是否正确触发?您能否提供更多相关信息?
  • 我们可以放心地忽略更新按钮。它仅在用户决定更新他们所做的任何更改后才适用。但为了回答是的,点击事件正在触发按钮。网格仅显示没有更新功能的数据。我在网格中添加了一个标签字段,它会正确更改。更多阅读将我带到了此页面weblogs.asp.net/infinitiesloop/archive/2006/08/03/…,它推断文本框维护自己的视图状态,这就是禁用视图状态没有帮助的原因。遗憾的是没有解决方法的线索

标签: c# .net gridview postback


【解决方案1】:

克里斯, 控件具有所谓的 ControlState,您无法禁用它。您遇到的问题是您在页面加载中加载和绑定,然后触发一个动作。

我们解决这个问题的方法是在 Page_Load 中加载数据并在 OnPreRender 中绑定数据。

例如:

private void Page_Load(object sender, System.EventArgs e)
{
  grid.DataSource = whatever;
}

// your dropdown event occurs between these two events

protected override void OnPreRender(EventArgs e)
{
   grid.DataBind();
}

要更好地理解 ASP.NET ViewState,请查看http://msdn.microsoft.com/en-us/library/ms972976.aspx

【讨论】:

  • OnPrerender 是我需要的技巧,谢谢!有趣的是,在更改数据源的 SelectCommand 时,数据绑定似乎是隐含的。换句话说,如果我在 OnPreRender 中设置 SelectCommand 属性,我就不需要调用 DataBind 方法。无论如何它都会运行它。我所做的是将 SelectCommand 初始化为空,以防止它运行(假设),并且只在 OnPreRender 中设置它,然后用新的数据集填充它。非常感谢 Jim DC
【解决方案2】:

数据绑定仅在通常使用 Page.DataBind 调用时覆盖数据,这通常仅在页面的初始获取时完成,在您的代码中

override void OnLoad(){
    if(this.IsPostBack == false){
        this.DataBind();
    }
}

或类似的事情,当您的回发发生时,您不是数据绑定。这通常是正确的行为。

如果您希望在下拉列表更改时仅重新绑定网格,您可以将服务器端 onChange 事件处理程序添加到下拉列表中,并专门对您的 Gridview 进行数据绑定,例如

void OnDropDownChange(EventArgs args){
    gridView.DataBind();
}

阅读更多有关数据绑定的信息可能是一个好主意,因为它非常重要并且与许多其他方法非常不同。 http://support.microsoft.com/kb/307860 将是一个开始的地方。

【讨论】:

  • 感谢链接很有帮助。在这种情况下,即使它是回发,我也确实想进行数据绑定。因为有问题的回发正在更改数据源。因此文本框必须改变而不是保持它们的控制状态。
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多