作成フォームをモーダルダイアログに変更していますが、jquery控えめな検証が機能しなくなり、修正方法がわかりません。
Index.cshtmlには、モーダルダイアログをトリガーするためのリンクがあります。
<a href="#" id="createCustomer">Create</a>
@section scripts{
<script type="text/javascript">
$('#createCustomer').on('click', function () {
$.get('/Customer/Create', function (data) {
$('#modalContainer').html(data);
$('#myModal').modal({});
});
});
Create.cshtmlは部分的なビューです。
@model Demo.Web.Models.CustomerVm
@using (Html.BeginForm("Create", "Customer", FormMethod.Post, new { @id="createForm" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Customer</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
コントローラには、フォームの作成のために部分的なビューを返すactionmethodがあります。
public ActionResult Create()
{
return PartialView("Create");
}
モーダルを表示
public class CustomerVm
{
[Required]
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
モーダルダイアログに変更する前は..すべてが機能していましたが、今は修正方法がわかりません。ダイアログで検証を機能させるにはどうすればよいですか?明らかに、クライアントスクリプトの検証ルールを書き直したくありません..ビューモデルから機能させたいです..ありがとう。
ページの読み込み時にフォームがページに追加されないため、控えめな検証ではフォームが取得されません。これを修正するには2つの方法があります。
$.validator.unobtrusive.parse("#id-of-the-form");
のようなものダイアログを動的にロードする場合は、含まれている要素の変更イベントに控えめな検証を登録するだけです。
$('#modal-container').change(
function() {
$.validator.unobtrusive.parse("#your-form-id");
});
フォームの作成ビューに次のスクリプトを追加するだけです。
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
type="text/javascript">
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
type="text/javascript">
</script>
作成ページの部分ビュー->モーダルヘッダー、モデルボディ、モーダルフッター、および<script>your code </script>
内のjavascriptコード-<script>your code</script>
を@section Scripts{}
に入れないでください。