【问题标题】:Controls not retaining values after postback when FormView set to insert mode当 FormView 设置为插入模式时,控件在回发后不保留值
【发布时间】:2010-10-19 16:38:50
【问题描述】:

我正在使用 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 在第一次回发后仍然不保留值,但现在后续回发工作正常并且值被保留。

任何想法将不胜感激。

【问题讨论】:

    标签: asp.net formview


    【解决方案1】:

    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);
               }
           }
       }
    

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

    【讨论】:

    • 如果可以的话,包括源链接。
    【解决方案2】:

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

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

    e.KeepInEditMode = true;
    

    希望这会有所帮助..

    【讨论】:

    • 如果您有新问题,请点击 按钮提出问题。如果您有足够的声誉,you may upvote 的问题。或者,将其“加星标”作为收藏夹,您将收到任何新答案的通知。
    • KeepInEditMode 仅在单击带有更新命令的按钮后使表单视图保持在编辑模式它与保留未提交和新输入的数据无关msdn.microsoft.com/en-us/library/… "默认情况下, FormView 控件在更新操作后返回到 DefaultMode 属性指定的模式。使用 KeepInEditMode 属性指定 FormView 控件是否应保持在编辑模式。"
    【解决方案3】:

    FormView.ChangeMode(FormViewMode.Insert)

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

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

    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 有意义,以便在您需要使用它们或通过智能感知调用它们时更容易并且不太可能出错。

    祝你好运。

    :)

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        尝试更改页面初始化或预渲染事件的模式

        【讨论】:

        • 尝试了你的建议,但没有运气。
        【解决方案6】:

        试试

        MyFormView.EnableViewState = true;
        

        【讨论】:

        • 为 FormView 控件启用了 ViewState。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 2017-02-11
        相关资源
        最近更新 更多