現在、モデル クラス レベルで、CreatedDate やナビゲーション プロパティ オブジェクトなど、ユーザーが定義してはならない属性をモデル バインダーから除外しました。
したがって、モデル クラス内で次のBIND
リストを定義します。これにより、ユーザー (またはハッカーでさえも) が CreatedDate フィールドの値を含めることができなくなり、この値は、オブジェクトの作成時にシステム コード内でのみ設定されます。そのため、次のようにバインドリストに含めませんでした:-
[MetadataType(typeof(Group_validation))]
[Bind(Include="Description,GroupID,Name")]
public partial class Group
{
しかし、問題は、POST Edit アクション メソッド内に、次のコードがあることです:-
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Group group)
{
try
{
if (ModelState.IsValid)
{
groupRepository.InsertOrUpdate(group);
groupRepository.Save();
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
var clientValues = (Group)entry.Entity;
CreateDate フィールドが必要なため、エラーが発生し、モデル バインダーから除外していますか? では、モデル バインダーから CreateDate を除外すると同時に、null 例外を回避するにはどうすればよいでしょうか。
objectID を Edit アクション メソッドに渡すだけでよいことはわかっていますが、これでは DbUpdateConcurrencyException が発生しなくなります。そのため、上記のコードで行っているように、グループ オブジェクトを編集アクション メソッドに渡す必要がありました。