2

フォームがあり、必須項目は顧客名だけです。したがって、私のモデルには次のものがあります。

 [DisplayName("Customer name*:")]
 [Required]
 public string CustomerName
 { get; set; }

以前、私は HTML 投稿を行っていましたが、検証を含め、すべてが正常に機能していました。

ここで、重要な事実であるExt.direct.mvc ( http://code.google.com/p/ext-direct-mvc/ ) を使用してフォームを「ajax 化」し、データを Json に投稿しました。フォーマットとデータが正常に投稿されています。

ここに画像の説明を入力

コードにブレークポイントを設定すると (現在はデバッグ目的で変更されています):

 [DirectInclude]
    [HttpPost]
    public ActionResult SaveOrUpdateOrderLines(CustomerOrderModel customerOrderModel)
    {

        if (!ModelState.IsValid)
        {
            return ModelState.JsonValidation();
        }

        return null;

CustomerOrderModel.CustomerOrderHeader.CustomerName = "" であることがわかります

ここに画像の説明を入力

しかし、ModelState.IsValid は true です。

ここに画像の説明を入力

今私が試したことのいくつかについて:

  1. CustomerName = null であることを確認するために、ModelState.isValid をチェックする直前に次のコードを挿入しました。

    customerOrderModel.CustomerOrderHeader.CustomerName = null;

  2. TryUpdateModel(customerOrderModel) を使用してみましたが、次のエラー メッセージが表示されます。

    TryUpdateModel がタイプ 'System.MissingMethodException' の例外をスローしました

  3. 「ルート」「CustomerOrderHeader」の名前が「customerOrderModel」に変更されてパラメーターに一致するように、json データを変更しようとしました。

これらのことはどれもうまくいきませんでした。では、検証が機能しなくなったというのは、何が間違っているのでしょうか? 問題をデバッグするには、どのような手順を実行できますか?

カウンセラーベンの編集

ここに画像の説明を入力

カウンセラーベンの編集2

ここに画像の説明を入力

4

1 に答える 1

0

問題は、Json 応答をバインドしようとするときに、コントローラー アクション内の変数の名前が、クライアント側で渡される変数の名前と一致する必要があることです。CustomerOrderHeader が null であるため、モデルは有効です。

クライアント スクリプトでは、モデル全体を「customerOrderModel」という名前の要素でラップする必要があります。これにより、名前がアクションの変数名と一致します。

于 2011-08-17T12:34:55.740 に答える