0

私は少しの間asp.net mvcを使用しています(しかし、私はまだ初心者です)。jquery ポストバックの結果として 2 つのビューを更新できるようにしたいと考えています。

基本的に、リストと詳細ビューがあります。詳細ビューは、jquery ポップアップ (jquery-UI ポップアップを使用) を使用して表示されます。詳細の保存が成功した場合 (つまり、詳細ビューに検証エラーがない場合) にのみ、リストを更新したいと考えています。ただし、詳細ビューに検証エラーがある場合は、ユーザーに検証エラーが表示されるように詳細ビューを更新したいと考えています。

だから私は自分のコントローラーで、ビューの代わりに JsonResult を返すと考えました。

[HttpPost]
public ActionResult SavePersonInfo(Person p) {
    if(ModelState.Valid) {
        return View("PersonList");
    }

    return Json({Error = true, View = PartialView("PersonDetails", p)});
}

ご覧のとおり、エラーがない場合は個人リスト ビューを返しますが、検証エラーがある場合は詳細ビューを返します。JsonResult を返す理由は、ビュー (jquery) が更新するセクションを認識できるように、ビューにエラーがあることを伝える必要があるためです (個人リストの 'div' を更新するか、ポップアップ ダイアログの 'div を更新するかなど)。 ')。

したがって、私の見解では、jquery は次のようになります (人物の詳細を入力するためのフォームがあり、「保存」ボタンをクリックすると「SubmitPersonForm();」関数が呼び出されると仮定してください):

<script type="text/javascript>
    $('#btnSave').click(function (event) {
            onBegin();

            $.ajax(
            {
                type: "POST",
                url: "/Person/Save",
                data: $('form').serialize(),
                success: function (result) {
                 if(result.Error) {
                        $('#dvDetails').html($(result).View));
                    }
                    else {
                        $('#dvPersonList').html($result);
                    }  
                }
            });
        });
</script>

したがって、私が今抱えている問題は、検証エラーが発生した場合、正しい「div」が更新されていることを確認できますが、asp.net mvc 検証メッセージが失われることです。ASP.NET MVC がそれらを完全に無視しているかのように、検証エラーは赤色で表示されません。ただし、私の ModelState にはこれらのエラーがあり、詳細ビューには表示されません。検証の概要と Html.ValidationFor(m => ...) ステートメントが詳細ビューに表示されています。

検証エラーが表示されない理由を教えてください。私は JSonResult を使用していますが、「dvDetails」をレンダリングするときに有効なビューである適切なプロパティを使用しています。asp.net mvcで想定していないことをしていますか? ところで、Visual Studio 2010 RC で asp.net mvc2 RC を使用しています。

ありがとうございました。

4

2 に答える 2

0

ASP.NET MVC コードは応答を処理して、ポストバック中に ModelState に格納された検証エラーを表示します。Ajax Post を使用しているため、ポストバック コードはページを再構築せず、検証エラーを表示しません。検証エラーを表示する場合は、自分で処理する必要があります。

私は ModelState エラーを配列として応答に渡すことでそれを行いました。Ajax 応答を処理して、フォーム内の検証エラー プレースホルダー要素を応答内の対応するエラー メッセージで更新します。

ただし、警告: ModelState のキーは大文字と小文字が変更されている可能性があるため、フォーム内の要素 ID 文字列は、キーに使用される文字列と正確には一致しません。ModelStateDictionary は大文字と小文字を区別しませんが、DOM ID は区別しません。

于 2011-09-12T14:45:41.400 に答える
0

URL がアクション名と一致しません...コントローラーで間違ったメソッドを呼び出している可能性があるかどうかはわかりません...ただのアイデアです。:-)

于 2010-03-31T19:15:07.747 に答える