Как запретить FormView очищать введенные пользователем значения после запуска метода вставки? - PullRequest
5 голосов
/ 26 февраля 2010

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

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

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

Итак, как предотвратить очистку 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 Ответ

1 голос
/ 14 июля 2011

Вам необходимо создать свой собственный серверный элемент управления, который наследуется от элемента управления 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...