«Требуется значение» для свойств GUID и DateTime, которые доступны для чтения / записи в классе - PullRequest
0 голосов
/ 23 апреля 2009

Я создал бизнес-объект (обычный старый класс со свойствами, ничего особенного), у которого есть пустой конструктор, и я использую его как строгий тип в моем представлении для / Member / Create (см. Код).

Это все работает нормально, я получаю объект "post back" из представления Create - и мой метод memberToCreate.Save () фактически записывает то, что он должен, в базу данных.

Но после того, как это сделано, представление создания снова отображается, и поля типа guid и datetime вызывают ошибку проверки («Требуется значение») - если только они не являются свойствами только для чтения.

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

Как мне обойти это? Могу ли я пометить свойство как обязательное / не обязательное?

'
' GET: /Member/Create

Function Create() As ActionResult
    Return View()
End Function

'
' POST: /Member/Create

<AcceptVerbs(HttpVerbs.Post)> _
Function Create(<Bind(Exclude:="MemberId")> ByVal memberToCreate As Biz.Member) As ActionResult
    memberToCreate.Save()
    Return View()
End Function

Это даст мне ошибку проверки:

    Public Property DateOfBirth() As Date
        Get
            Return _DateOfBirth
        End Get
        Set(ByVal value As Date)
            _DateOfBirth = value
        End Set
    End Property

Это не ...

    Public Readonly Property DateOfBirth() As Date
        Get
            Return _DateOfBirth
        End Get
    End Property

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

Попробуйте изменить атрибут связывания на <Bind(Exclude:="MemberId, DateOfBirth")>.

Или вы можете сделать свойство DateOfBirth обнуляемым, если это нормально для вашей бизнес-логики.

1 голос
/ 23 апреля 2009

После еще одного исследования (с новыми ключевыми словами, предоставленными мне cagdas), я пришел к этому решению:

 '
' POST: /Member/Create

<AcceptVerbs(HttpVerbs.Post)> _
Function Create(<Bind(Exclude:="MemberId,UserId,CreatedBy,ModifiedBy")> ByVal memberToCreate As eForening.Biz.Member) As ActionResult

    If ModelState.Item("DateOfBirth").Value.AttemptedValue = String.Empty Then
        ModelState.Item("DateOfBirth").Errors.Clear()
    End If

    If Not ModelState.IsValid Then
        Return View()
    End If
    memberToCreate.Save()
    Return RedirectToAction("Index")
End Function

Это позволяет мне обрабатывать как пустые, так и заданные значения для DateOfBirth - и я сохраню свой существующий бизнес-класс таким, какой он есть (и, как и должно быть, по моему мнению).

Я в основном проверяю предоставленное значение DateOfBirth, и если предоставленное значение является пустой строкой, я сбрасываю счетчик ошибок этого поля и продолжаю проверку - перед проверкой Modelstate.IsValid.

Может быть, есть более элегантное решение, но это лучший вариант, который я нашел до сих пор.

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