ための代替が[Bind(Exclude = "Id")]
ための代替(Related Question)ASP.NET MVC - [バインド(= "ID" を除外)]
があり、私がモデルバインダーを書くことができ
ための代替が[Bind(Exclude = "Id")]
ための代替(Related Question)ASP.NET MVC - [バインド(= "ID" を除外)]
があり、私がモデルバインダーを書くことができ
はい、あります?それが呼ばれています? 。。ビューモデルビューモデルは
特に特定のビューの特定のニーズに合わせたクラスであるので、代わりの:public ActionResult Index([Bind(Exclude = "Id")] SomeDomainModel model)
使用:
ここで、ビューモデルには、バインドする必要があるプロパティのみが含まれています。次に、ビューモデルとモデルの間をマッピングできます。このマッピングはAutoMapperで簡略化できます。
ベストプラクティスとして、常にビューとの間でビューモデルを使用することをお勧めします。
私が理解した非常に簡単な解決策です。
public ActionResult Edit(Person person)
{
ModelState.Remove("Id"); // This will remove the key
if (ModelState.IsValid)
{
//Save Changes;
}
}
}
デズモンドが述べたように、私は私が無視される複数の小道具のために便利になることができ、簡単な拡張を行ったまた、非常に使いやすい削除見つける...
/// <summary>
/// Excludes the list of model properties from model validation.
/// </summary>
/// <param name="ModelState">The model state dictionary which holds the state of model data being interpreted.</param>
/// <param name="modelProperties">A string array of delimited string property names of the model to be excluded from the model state validation.</param>
public static void Remove(this ModelStateDictionary ModelState, params string[] modelProperties)
{
foreach (var prop in modelProperties)
ModelState.Remove(prop);
}
あなたはすることができますあなたのアクションメソッドでは、このようにそれを使用する:既存の回答に加えたよう
ModelState.Remove("ID", "Prop2", "Prop3", "Etc");
、C#6は、より安全な方法でプロパティを除外することを可能にする:
public ActionResult Edit(Person person)
{
ModelState.Remove(nameof(Person.Id));
if (ModelState.IsValid)
{
//Save Changes;
}
}
}
または
public ActionResult Index([Bind(Exclude = nameof(SomeDomainModel.Id))] SomeDomainModel model)
は、私はこの答えを好むが、私はまだあなたが[のviewmodels](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)を使用する必要があると考えていると、[POCOさん](のhttp://のstackoverflow。デザインパターンと[SoC](http://stackoverflow.com/questions/98734/what-is-separation-of-concerns)に関しては、com/questions/250001/poco-definition)があります。 –
あなたはASP.NETのコアを使用している場合は、属性とプロパティを飾ることができます。
[BindNever]
+1これは、私がViewModelとビジネスモデルについて見たことのある最も良い記述です。私はセキュリティの観点から考えたことはありません。しかし、httpは少なくともビューモデルを使用する**理由です。 – jgauffin
私は更新用の個別のビューモデルとシナリオを作成する必要がありますか? – Rookian
@Rookian、はい、別々のビューモデルを持つことをお勧めします。 –