私はこのようなアクションを持っています:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
しかし、動的を使用すると、ModelState.IsValid
常にtrueが返されるため、動的オブジェクトに検証がないように見えますか?そうでない場合、どうすればこれを解決できますか?
私はこのようなアクションを持っています:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
しかし、動的を使用すると、ModelState.IsValid
常にtrueが返されるため、動的オブジェクトに検証がないように見えますか?そうでない場合、どうすればこれを解決できますか?
2つのケースがあります:
ビューモデルをアクション引数として使用しています。この場合、デフォルトのモデルバインダーがプロパティを自動的に割り当て、発生する可能性のあるエラーをモデルの状態に設定します。
public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
{
if (ModelState.IsValid)
{
}
...
}
どちらdynamic
かFormCollection
で弱い型付けを使用している場合、またはその場合、デフォルトのモデルバインダーは作動せず、実際のモデルタイプを推測できないため、検証をまったく実行しません。この場合、手動で呼び出しTryUpdateModel
てモデルタイプを指定する必要があります。
public ActionResult Update(dynamic edited)
{
var model = new MyViewModel();
if (!TryUpdateModel(model, "CurrentModel"))
{
// The model was not valid
}
...
}
結論:dynamic
コントローラーアクションでアクション引数として使用することはほとんど意味がありません。