在插入方法触发后,如何防止FormView清除用户输入的值?

时间:2010-02-26 16:08:36

标签: asp.net vb.net insert objectdatasource formview

我一直在努力让FormViews按照微软预期的方式工作一天,然后想出一些很棒的东西。

我可以在ObjectDataSource.Inserting事件处理程序中捕获e.Exception和e.ReturnValue,我甚至可以通过检查e.ObjectInstance来欺骗并检查ObjectDataSource.ObjectDisposing中Object的其他属性......我甚至学会了FormView的插入处理程序在ObjectDisposing处理程序之后运行,所以如果发现问题,我仍然有时间对它做出反应并在FormView上将e.KeepInInsertMode设置为true。

我的问题是,似乎用户输入的插入表单中的值无论如何都会被清除。

那么,在插入方法被触发后,如何防止FormView清除?

(使用ASP.NET + VB)

我不认为在这里发布我的代码会真的做得很好而且我必须修改它以修剪机密的业务逻辑...所以我暂时不会这样做。

编辑:

我找到了一个临时的,非常可靠的解决方案(如果没有人找到问题的真正解决方案)。

我有一个页面变量定义为:

Dim eInsertArgs As FormViewInsertedEventArgs

然后我在ItemInserted处理程序

中执行以下操作
    If boolInsertErrorOccurred = False Then
        e.KeepInInsertMode = True
        eInsertArgs = e
    Else
        eInsertArgs = Nothing
    End If

然后在每个控件上我都有类似这样的控件数据绑定事件:

    If IsNothing(eInsertArgs) = False Then
        Dim _sender As TextBox = sender
        _sender.Text = eInsertArgs.Values("_FieldName")
    End If

这样做的结果是我在ASP.NET将FormView绑定到默认(空白)模板后将值设置为提交的值。

请帮我找一个不太可怕的解决方案。 :)

1 个答案:

答案 0 :(得分:1)

您需要创建自己的服务器控件,该控件继承自FormView控件。

Public Class MyFormView
     Inherits FormView

Protected Overrides Sub OnDataSourceViewChanged(ByVal sender As Object,
ByVal e As EventArgs)
     If (MyBase.CurrentMode = FormViewMode.Insert) Then
           MyBase.RequiresDataBinding = False
     Else
           MyBase.OnDataSourceViewChanged(sender, e)
     End If
End Sub

End Class

请查看此页:http://www.dotnetmonster.com/Uwe/Forum.aspx/asp-net/76885/FormView-Insert