0

私はこのようなアクションを持っています:

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

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

4

1 に答える 1

2

2つのケースがあります:

  1. ビューモデルをアクション引数として使用しています。この場合、デフォルトのモデルバインダーがプロパティを自動的に割り当て、発生する可能性のあるエラーをモデルの状態に設定します。

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

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

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

于 2011-03-26T11:30:55.237 に答える