私は少しの間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 を使用しています。
ありがとうございました。