ビジネスオブジェクト(プロパティを持つ単純な古いクラス、空想はありません)、空のコンストラクタを作成しました。 /メンバー/作成のための私のビュー(コードを参照)に強いタイプです。クラスに読み書き可能なGUIDとDateTimeプロパティの値が必要です
これはすべて正常に動作し、オブジェクトは「作成ビュー」から「ポストバック」され、メソッド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
あなたのアプローチはどちらも良いもので、何かを教えてくれました。 DateOfBirthを値または何も設定できないようにする必要があります。つまり、バインディングで宣言的に除外することは実行可能なオプションではありません。 私も以前は聞いたことがなかったIsNullableを試しました。かなり興味深いコンセプトですが、実際にビジネスモデルのプロパティを別のタイプに変更したいだけで、検証の問題を回避することはできません。 – Kjensen
うれしい答えがありました。しかし、Nullable(Of Date)型でクラスのDateOfBirthプロパティを宣言したいようです。デフォルトのモデルバインダーにバインドするオプティカルプロパティとして強制的に表示されるので、ポストされたフォームに値が含まれていない場合はnull値が返されます。 –