質問

次のようなアクションがあります。

Update([Bind(Prefix = "CurrentModel")] dynamic edited)

しかし、動的を使用すると、 ModelState.IsValid 常に true を返すので、動的オブジェクトの検証が行われていないように見えますか?そうでない場合、どうすればこれを解決できますか?

役に立ちましたか?

解決

次の 2 つのケースがあります。

  1. View Model をアクション引数として使用している場合、デフォルトのモデル バインダーは自動的にプロパティを割り当て、モデルの状態に考えられるエラーを設定します。

    public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
    {
        if (ModelState.IsValid)
        {
    
        }
        ...
    }
    
  2. どちらかで弱い型付けを使用しています dynamic または FormCollection この場合、デフォルトのモデル バインダーは実際のモデル タイプを推測できないため、起動せず、検証もまったく実行しません。この場合、手動で呼び出す必要があります TryUpdateModel モデルのタイプを指定します。

    public ActionResult Update(dynamic edited)
    {
        var model = new MyViewModel();
        if (!TryUpdateModel(model, "CurrentModel"))
        {
            // The model was not valid
        }
        ...
    }
    

結論:使用して dynamic コントローラーアクションのアクション引数はほとんど意味がありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top