6

我正在使用 Page_Load 事件中的 ChangeMode 方法将 FormView 的 CurrentMode 设置为插入模式,如下所示:

if(!Page.IsPostBack)
{
    MyFormView.ChangeMode(FormViewMode.Insert);
}

在我的 FormView 的插入模板中,我有一个 DropDownList 控件,它的 AutoPostBack 属性设置为 true。我在插入模板中还有其他几个 DropDownList 和 TextBox 控件。

每当我更改 DropDownList 的选择并发生回发时,我都会丢失输入到控件中的所有值。奇怪的是,如果我在初始页面加载后的任何时间使用 ChangeMode 将 FormView 设置为插入模式,我就没有问题。我已经使用调试器逐步完成了代码,一切似乎都在正确地发生,但是在我的 DropDownList 事件处理程序运行后的某个时间,一切似乎都被重置了。

这里发生了什么?

更新:我注意到我的 FormView 位于带有 runat="server" 和 enableviewstate="false" 的 div 标签内。为容器 div 启用视图状态后,我开始看到稍微不同的行为。FormView 在第一次回发后仍然不保留值,但现在后续回发工作正常并且值被保留。

任何想法将不胜感激。

4

6 回答 6

2

Walter Wang [MSFT] 来自其他论坛的这个答案 - 2007 年 1 月 26 日 03:29 GMT

首先,问题似乎是数据源控件告诉 FormView 数据已更改,因此它应该重新绑定以获取新数据。这实际上不应该这样做,因为我们仍处于插入模式。我有一个解决方法供您参考:从 FormView 继承以创建您自己的 FormView 控件,如果我们处于插入模式,则覆盖 OnDataSourceViewChanged 并将 RequiresDataBinding 设置为 false:

public class MyFormView : FormView
   {
       protected override void OnDataSourceViewChanged(object sender,
EventArgs e)
       {
           if (this.CurrentMode == FormViewMode.Insert)
           {
               this.RequiresDataBinding = false;
           }
           else
           {
               base.OnDataSourceViewChanged(sender, e);
           }
       }
   }

我已经对其进行了测试,它似乎工作正常。请试一试,让我知道结果。

于 2010-03-04T14:09:54.163 回答
0

FormView.ChangeMode(FormViewMode.Insert)

这必须有效,检查身份证并使用智能感知?

我的示例是添加项目表单视图..

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    AddNewItemFormView.ChangeMode(FormViewMode.Insert)
End Sub

尝试在没有任何“if..then's”的情况下在页面加载时执行此操作,如果它有效,您会知道这不是表达式,而是 if 内容或构造。请记住使控件 ID 有意义,以便在您需要使用它们或通过智能感知调用它们时更容易并且不太可能出错。

好运。

:)

于 2009-07-02T20:23:21.917 回答
0

尝试

MyFormView.EnableViewState = true;
于 2009-04-15T19:44:08.777 回答
0

ViewState 在 PageLoad 之前加载,我的猜测是通过更改 PageLoad 上的模式重新创建另一组控件,即 EditItemTemplate 中的控件。如果它默认设置为编辑模式,并且您在 PageLoad 上取消注释该行,它会保持这些值吗?如果您不切换模式,它应该。

于 2009-04-17T15:35:03.897 回答
0

我在EditItem模板中没有保留类似的视图状态问题。设置EnableViewState = true也无济于事。

我所做的是得到OnUpdated()函数,在函数的最后,

e.KeepInEditMode = true;

希望这可以帮助..

于 2010-08-05T03:09:07.197 回答
-1

尝试更改 Page Init 或 Prerender 事件的模式

于 2009-04-15T20:22:38.730 回答