我有一个包含RenderPartial标记的视图。在局部视图中我有一个表单但是客户端表单验证在服务器请求之前没有触发。服务器端验证工作正常。这是奇怪的,因为我有其他的观点,但没有RenderPartials完美的工作。似乎当我包含RenderParial时,似乎导致验证停止工作。
BTW - 我已将两个webconfig设置都设置为true:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
此外,模型已更新为包含[必需]属性。这是一个快照:
[Required]
[CreditCard]
public string CardNumber { get; set; }
[Required]
[Display(Name = "Name on card")]
public string CardHolder { get; set; }
[Required]
public string Address { get; set; }
以下是父代码段:
@if (ViewBag.tabvalue.Equals("billing"))
{
<div>
<p>
@{Html.RenderPartial("_BillingInfo");}
</p>
</div>
}
这是子部分视图(我删除了一些字段以减少复制量):
@model MVC4.Models.ClientCreditCard
@using (Html.BeginForm("CreditCard", "Client", FormMethod.Post, new { }))
{
@Html.AntiForgeryToken()
<fieldset style="color:white">
<legend></legend>
<div style="color:white;clear:left">@Html.ValidationSummary(true)</div>
<div class="editor-label">
@Html.LabelFor(model => model.CardNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CardNumber)
@Html.ValidationMessageFor(model => model.CardNumber)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CardHolder)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CardHolder)
@Html.ValidationMessageFor(model => model.CardHolder)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Address)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address)
@Html.ValidationMessageFor(model => model.Address)
</div>
<p>
<input type="submit" value="Submit" />
</p>
</fieldset>
}
先谢谢你的帮助!
答案 0 :(得分:0)
在我看来,您没有在视图中包含JQuery验证文件。 因此,您的客户端验证不起作用。您需要在视图中编写以下代码。
@section scripts {
@Scripts.Render("~/bundles/jqueryval")
}
答案 1 :(得分:0)
如果符合以下条件,客户端验证应该正常工作:
jquery.validate.js
,validate.unobtrusive.js
包含ClientValidationEnabled
,UnobtrusiveJavaScriptEnabled
设置为
真document.ready
触发 RenderPartial
不会导致问题。我的意思是你使用ajax加载表单(你的表单在document.ready
触发后加载)?如果是,则应通过添加以下内容手动解析表单:
$.validator.unobtrusive.parse('<your_form_selector>');
注意:
由jquery验证器正确解析的表单将具有novalidate="novalidate"
属性。检查你的表格,如果它有一个开始故障排除。