ユーザーがいくつかの異なるものを作成できるようにする MVC3 ビューがあります。親ビュー内では、これを行うためのフォームは、次のような jquery ui タブを介して分割されます。
<div id="tabs">
<ul>
<li><a href="#tabs-1">New Thing 1</a></li>
<li><a href="#tabs-2">Different New Thing</a></li>
</ul>
<div id="tabs-1">@Html.Action("CreateNewThing", "NewThingController")</div>
<div id="tabs-2">@Html.Action("CreateDifferentThing", "DifferentThing")</div>
<div></div>
</div>
<script type="text/javascript">
$(function () {
$("#tabs").tabs();
});
</script>
部分ビュー内には次のものがあります。
@model NewThingViewModel
@using (Html.BeginForm("CreateNewThing", "NewThingController", FormMethod.Post, new { id = "frmCreateNewThing" }))
{
...
入力フィールド、送信ボタンなど。
ただし、現在検証に配線していて、問題があります。
コントローラーでは、次のようにビューをレンダリングしています。
public ActionResult CreateNewThing(NewThingViewModel model)
{
... initializing model fields, drop downs etc.
return PartialView("CreateNewThing", model);
}
次のような別の投稿方法があります。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateNewThing(NewThingViewModel newThingViewModel, FormCollection collection)
{
.....
}
サンプル モデル:
public class NewThingViewModel
{
[Required]
[StringLength(50)]
[Display(Name = "Display Name:")]
public string DisplayName { get; set; }
}
問題は、ページが最初に表示されたときに、モデルの DataAnnotations を介して [Required] とマークされたフィールドが赤色で表示され、ページが最初に表示されたときに無効であることを示す検証の概要が表示されることです。IE では、ユーザーが初期ロード時に何かを入力する前、またはテキスト ボックスに何かを入力する前に、既に投稿されているように動作しています。
デバッガーでキャッチできるため、最初のポスト以外の CreateNewThing が起動していることはわかっています。
Get で検証が起動する原因は何ですか?
Html.Action の動作方法と、部分ビューを別のビューにレンダリングしているという事実が原因ですか?
私は UnobtrusiveJavaScriptEnabled と ClientValidationEnabled = true を web.config で使用しています。
この特定の問題に遭遇した人は他にいません。他のすべての例は機能しているように見えますが、ビューがjquery uiタブに含まれる3つのパーシャルに分割されている例は見つかりません。
これを修正するにはどうすればよいですか?
オプション: 回避策として Model.IsValid を手動で操作する必要がありますか? Html.Action の代わりに、別のメカニズムを使用して親ビューで部分ビューをレンダリングしますか? javascript/jquery を使用して検証をキャッチし、停止しますか?