3

私は次のモデルを持っています:

public class PersonListModel
{
   ....

    [Required(ErrorMessage=AppConstants.MustSelectRecordToAttachMessage)]
    public String SelectedPersonId { get; set; }
}

および次のビュー:

@using (Html.BeginForm("Attach", "Person", FormMethod.Post, new { @id = attachRecordFormId, targetDivId = personListId, @class = "inlineForm" }))
{
    .....

    @Html.HiddenFor(x => x.SelectedPersonId);

    .....

   <br />@Html.ValidationMessageFor(x => x.SelectedPersonId)
}

非表示のSelectedPersonIdフィールドは、ページ上の要素の1つのkeyupイベントにフックされたJavaScriptを介して入力されます。

私の問題は、フォームが送信されたときだけでなく、必要な検証メッセージにこの部分的なビューがすぐに表示されることです。また、Ajax投稿を介して部分ビューが再度レンダリングされた後も表示されます。

この問題を示さない非常によく似たビューがありますが、この問題を示す2つのビュー(上記のものを含む)があります。正しく機能するビューと、この誤った動作を示す2つのビューの違いを理解するために、排除のプロセスを経てきましたが、問題の原因を特定できませんでした。

問題のあるビューがロードされたときに、何かが目立たない検証を起動させていると思います。どうすればこれを追跡できますか?

4

1 に答える 1

3

私の問題は、必要な検証メッセージがこの部分的なビューが表示されるとすぐに表示されることです

これは、ビュー(パーシャルを含む)を表示しているコントローラーアクションがビューモデルを引数として取る場合に発生する可能性があります。

public ActionResult Display(MyViewModel model)
{
    ... if this action is called with a GET request and you have missed
        to pass a value for the "SelectedPersonId" query string parameter 
        you will get a validation error in the corresponding view

    return View(model);
}

これが発生する理由は、アクションがモデルを取得しているためです=>デフォルトのモデルバインダーがビューモデルにデータを入力しようとすると、SelectedPersonIdプロパティの値を設定しようとすると、モデルの状態に検証エラーが自動的に追加されますモデルプロパティが属性で装飾されているために、リクエストに対応する値がない場合[Required]

また、Ajax投稿を介して部分ビューが再度レンダリングされた後も表示されます。

これは正常であり、ターゲットのPOSTアクションがビューモデルを引数として取り、パーシャルをレンダリングしている場合に発生する可能性があります。

[HttpPost]
public ActionResult Process(MyViewModel model)
{
    ... if this action is called with a POST request and you have missed
        to pass a value for the "SelectedPersonId" form parameter 
        you will get a validation error in the corresponding partial view

    return PartialView(model);
}
于 2013-01-09T21:54:52.917 に答える