当FormView设置为插入模式时,控制在回发后不保留值

时间:2009-04-15 19:28:15

标签: asp.net formview

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

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

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

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

这里发生了什么?

更新: 我注意到我的FormView位于div标签内,其中runat =“server”和enableviewstate =“false”。一旦我为容器div启用了viewstate,我开始看到一个稍微不同的行为。在第一次回发后,FormView仍然不保留值,但现在后续的回发工作正常并保留值。

非常感谢任何想法。

6 个答案:

答案 0 :(得分:2)

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

  

首先,问题似乎是数据告诉FormView   源控制数据已更改,因此它应该   重新绑定以获取新数据。这实际上不应该这样做   因为我们仍处于插入模式。我有一个解决方法   reference:从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);
           }
       }
   }

我已经在我这边测试了它,看起来工作正常。请给它一个 试着让我知道结果。

答案 1 :(得分:0)

尝试

MyFormView.EnableViewState = true;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

FormView.ChangeMode(FormViewMode.Insert)

这必须工作,检查Id并使用intelisense?

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

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

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

祝你好运。

:)

答案 4 :(得分:0)

我在EditItem模板中没有保留类似的viewstate问题。 设置EnableViewState = true也没有帮助。

我所做的是获取OnUpdated()函数,并在函数的最后,

e.KeepInEditMode = true;

希望这会有所帮助..

答案 5 :(得分:-1)

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

相关问题