web-dev-qa-db-ja.com

データが投稿されていないときにページの読み込み時にMVC Razor検証エラーが表示される

私はデータ注釈をいじっています。リンクをクリックしてページに移動すると、検証メッセージが表示されますが、データが投稿されていない限り、検証メッセージが表示されないようにしたいのですが。

見る:

@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" })
@Html.ValidationSummary(true, "Registration Failed. Check your credentials")
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.")

モデル:

[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }

コントローラ:

[HttpGet]
        public ActionResult AddUser()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AddUser(UserCreateViewModel user)
        {
            if (ModelState.IsValid)
            {
                var success = UserRepository.AddUser(user);

                if (success)
                {
                    return View("Success");
                }
            }

            return View("AddUser");
        }

私が言ったように、私の問題はAddUserビューのページ読み込みで発生します。リンクをクリックしてAddUserページを表示すると、ロード後に検証メッセージが表示されますが、この時点ではデータが投稿されておらず、モデルは空です。

21
allencoded

検証スタイルを次のように設定します。

.validation-summary-valid { display:none; }

したがって、デフォルトでは非表示になっています。エラーが発生すると表示されます。

12
jzm

ユーザーをバインドした後、モデルの状態をクリアできます。

ModelState.Clear();

これは、ModelBinderがバインディングでModelStateを設定するために発生します。モデルをバインドして同じモデルのビューを返すすべてのアクションで、この問題が発生します。

[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
    if (ModelState.IsValid)
    {
        var success = UserRepository.AddUser(user);

        if (success)
        {
            return View("Success");
        }
    }

    ModelState.Clear(); // <-------
    return View("AddUser");
}
26
Renan Araújo
.field-validation-valid {
  display: none;
}

検証がページの読み込み時にトリガーされるたびに、この「.field-validation-valid」値は、トリガーされた入力要素のクラス属性に自動的に追加されます。

その特定のクラスの値として何も表示しないようにCSSを追加すると、最初のページの読み込み時に検証メッセージが表示されなくなります。

特定の入力要素がタッチされた後も、検証メッセージは通常どおり表示されます。

1
Jimmy Shaw

これは、モデルがビューに渡されず、getとpostの両方に同じアクションが使用されたときに起こりました。

@Renan Araujoのソリューションを適用しました

0
Arun Prasad E S

$('.field-validation-error').html("");

0
Nitin