Как запретить FormView очищать введенные пользователем значения после срабатывания метода вставки?

Я боролся с тем, чтобы FormViews работал так, как ожидает от меня Microsoft, около дня, и я придумал кучу отличных вещей.

Я могу поймать e.Exception и e.ReturnValue в обработчике событий ObjectDataSource.Inserting, и я могу даже обмануть и проверить другие свойства объекта в ObjectDataSource.ObjectDisposing, проверив e.ObjectInstance ... и я даже узнал, что FormView Inserting Обработчик запускается ПОСЛЕ обработчика ObjectDisposing, поэтому, если обнаружена проблема, у меня еще есть время отреагировать на нее и установить для e.KeepInInsertMode значение true в FormView.

Моя проблема в том, что кажется, что значения, введенные пользователем в форму вставки, очищаются независимо.

Итак, как мне предотвратить очистку FormView после срабатывания метода Insert?

(Используя 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 с шаблоном по умолчанию (пустым).

Пожалуйста, помогите мне найти менее ужасное решение. :)


person SinbadEV    schedule 26.02.2010    source источник
comment
вы должны отправить свою правку с решением в качестве ответа.   -  person Brian McCarthy    schedule 07.07.2011


Ответы (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

person DSXP    schedule 14.07.2011