2

数値属性と文字列属性を持つモデルがあり、それぞれに [Required] 検証アノテーションがあります。このモデルの入力フォームであるそれぞれのビューもあります。なんらかの理由で、ビューが読み込まれるとすぐに、ユーザーがフォームを送信しようとしたときにのみ表示される数値属性の必須検証メッセージとは対照的に、文字列属性の必須検証メッセージがすぐに表示されます (期待どおり)。文字列属性の奇妙な検証動作について手掛かりを持っている人はいますか?

アップデート

コントローラーアクションからビューを表示している「複雑な」方法に問題を絞り込みました。私の場合、多くの属性を持つエンティティの作成を担当する単一のコントローラー アクション Create があります。エンティティには多くの属性があるため、サーバー側のウィザードを使用してこのプロセスをいくつかのステップに分割しました。以下は、私のコントローラー アクションの簡略化されたバージョンです。

public ActionResult Create()
    {
        Model = new CreateEditListingViewModel();
        return View("StepOne");
    }

    [HttpPost]
    public ActionResult Create(string buttonValue, StepOneViewModel stepOneModel, StepTwoViewModel stepTwoModel, StepThreeViewModel stepThreeModel)
    {
        ActionResult nextView = null;
        CreateListingSteps step = (CreateListingSteps)Enum.Parse(typeof(CreateListingSteps), buttonValue);
        // Save the value of the step that has been submitted and redirect user to next step
        switch (step)
        {
            case CreateListingSteps.StepOne:
                Model.StepOne = stepOneModel;
                nextView = View("StepTwo");
                break;
            case CreateListingSteps.StepTwo:
                Model.StepTwo = stepTwoModel;
                nextView = View("StepThree");
                break;
            case CreateListingSteps.StepThree:
                Model.StepThree = stepThreeModel;
                nextView = View("Confirm");
                break;
        }
        return nextView;
    }

ユーザーが初めて [次へ] ボタン (すべてのステップ ビューで使用可能) をクリックすると、後続のすべてのフォームに対して検証がトリガーされ、ユーザーがまだフォームを送信していない場合でも、望ましくない文字列フィールドが無効として表示されるようです。 .

説明フィールドに必要なメッセージを表示する、送信されていない空白のフォーム。 データ型が文字列ではないため、Price が定期的に表示されます

誰でもこれに対する回避策を考えることができますか?

4

2 に答える 2

5

私はそれを解決しました。ModelState.Clear()必要なのは、新しいビューを返す前に呼び出すことだけでした。

于 2012-08-30T13:35:52.643 に答える
1

を使用して文字列を初期化してみてくださいString.Empty

于 2012-08-28T18:14:04.963 に答える