我正在使用ASP.Net MVC3,更简单的方法来使用客户端验证将启用jquery.validate.unobtrusive.对于那些来自服务器的东西,一切正常.
但是当我尝试用javascript注入一些新的"输入"时,我知道我需要调用$.validator.unobtrusive.parse()来重新绑定验证.但是,所有这些动态注入的字段都不起作用.
更糟糕的是,我尝试手动绑定使用jquery.validate它也无法正常工作.有什么想法吗?
我在这里放了一个小例子来复制问题.我有一个强类型的局部视图_Name.cshtml:
@model ValidationInPartial.ViewModels.MyViewModel
<h2>@ViewBag.Message</h2>
<fieldset>
<legend>Name</legend>
<div class="editor-label">
@Html.LabelFor(model => model.MyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MyName)
@Html.ValidationMessageFor(model => model.MyName)
</div>
<a href="#" id="reload">Reload Name</a>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<script type="text/javascript">
$(document).ready(function () {
$("#reload").click(function () {
$("#divName").load("Home/NameReload");
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
最初加载并显示在主Index.cshtml中
<div id="divForm">
@using (Html.BeginForm()) {
<div id="divName">
@Html.Partial("_Name")
</div>
}
</div>
Run Code Online (Sandbox Code Playgroud)
MyName字段是必需的,验证是通过MyViewModel中的Required属性实现的
namespace ValidationInPartial.ViewModels
{
public class MyViewModel
{
[Required(ErrorMessage = "Please enter a Name.")]
public string MyName { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
第一次加载页面后,如果单击"创建"按钮,则该字段将清空验证消息"请输入名称".显示在田野旁边,田地本身变成粉红色,这是预期的行为.现在通过单击"重新加载名称"链接,进行ajax调用(jquery.load(...)),重新加载部分,这里是控制器代码: …
我有关于这个问题的googeld,我检查了我的web.config,bundleconfig和我的布局,如下所示:web.config:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
在"BundleConfig.cs"下的App_Start文件夹中:
Run Code Online (Sandbox Code Playgroud)var jqueryBundle = new ScriptBundle("~/bundles/jquery"); jqueryBundle.Include("~/Scripts/jquery-{version}.js"); jqueryBundle.Include("~/Scripts/moment.min.js"); jqueryBundle.Include("~/Scripts/loadingoverlay.js"); jqueryBundle.Include("~/Scripts/fullcalendar.js"); jqueryBundle.Include("~/Scripts/lang-all.js"); jqueryBundle.Transforms.Add(jsTransformer); jqueryBundle.Orderer = nullOrderer; bundles.Add(jqueryBundle);var jqueryvalBundle = new ScriptBundle("〜/ bundles/jqueryval"); jqueryvalBundle.Include( "〜/脚本/ jquery.validate*"); jqueryvalBundle.Include( "〜/脚本/ jquery.validate.js"); jqueryvalBundle.Include( "〜/脚本/ jquery.validate.unobtrusive.js"); jqueryvalBundle.Transforms.Add(jsTransformer); jqueryvalBundle.Orderer = nullOrderer; bundles.Add(jqueryvalBundle);
在我的布局页面中:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
Run Code Online (Sandbox Code Playgroud)
萤火虫表明:
到目前为止,一切都包括在内,并且应该顺利运行.
我的模特:
[DisplayName("Förnamn")]
[Required(ErrorMessage = "Vänligen ange ett förnamn")]
[StringLength(100)]
public string FirstName { get; set; }
[DisplayName("Efternamn")]
[Required(ErrorMessage = …Run Code Online (Sandbox Code Playgroud) 我正在使用MVC 4和Entity Framework来开发一个Web应用程序.我正在使用加载了javascript的部分视图.其中之一是包含验证的创建视图.这就是我的问题:验证.我有一个自定义验证逻辑,例如,如果用户在某个字段(如"名称")中输入某些数字,则会显示错误.
在这里,使用部分视图,它将我的部分视图重定向到显示的错误,但我想要做的是保持在我的主视图(索引视图)并保留显示错误的部分视图.
编辑:
这是我的部分观点:
@model BuSIMaterial.Models.Person
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Person</legend>
<div class="editor-label">
First name :
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.FirstName, new { maxlength = 50 })
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
Last name :
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.LastName, new { maxlength = 50 })
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div class="editor-label">
National number :
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.NumNat, new { maxlength = 11 })
@Html.ValidationMessageFor(model => model.NumNat)
</div>
<div class="editor-label">
Start …Run Code Online (Sandbox Code Playgroud) 我正在使用以下内容:
我的Knockout View Model模板如下所示:
<tbody data-bind="foreach:recipientEmailAddressList">
<tr>
<td class="no-padding" style="width:330px">
<input class="suppress-ms-clear input-parameter full-width" data-bind="value:EmailAddress, hasfocus:EmailAddress.focused" name="EmailAddresses" data-val="true" data-val-email="Please enter a valid email address.">
</td>
<td class="no-padding align-right">
<div class="delete" data-bind="visible: $root.recipientEmailAddressList().length > 1">
<a href="" data-bind="click:$root.removeRecipientEmailAddress"><span class="no-wrap">X</span></a>
</div>
</td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
我在MVC视图中也有以下内容:
@Html.ValidationSummary(false)
Run Code Online (Sandbox Code Playgroud)
当我添加未通过验证的电子邮件时,无效元素样式正确应用于input元素,但验证摘要不会显示验证错误.同样,即使明显存在验证错误,也允许用户提交页面.
我没有任何绑定到表单的submit元素的代码.
似乎不引人注意的验证通过应用错误样式知道存在问题,但为什么它没有显示验证摘要?为什么我可以提交表格?如果我更正了电子邮件地址以使其有效,则输入上的错误样式将消失.
javascript jquery unobtrusive-validation asp.net-mvc-4 knockout.js
jquery ×3
ajax ×1
asp.net-mvc ×1
c# ×1
csh ×1
javascript ×1
knockout.js ×1
partial ×1
razor ×1
validation ×1