通过某种表单生成器,在页面上呈现元素列表,并且它们都具有对它们的验证.当我查看HTML源代码时,我看到如下内容:
<input type="text" id="email" name="email" data-val-required="No valid email address!" data-val="true">
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式动态地启用/禁用此类元素的验证.我尝试启用/禁用该data-val属性,方法是将其设置为false然后再返回true.但它似乎没有回应.验证总是在那里!
任何人都知道如何以动态方式启用/禁用某些字段的验证?
我正在尝试对单选按钮列表进行必要的验证,以强制用户选择继续选项.验证确实有效,但它只在第一个单选按钮上输出元数据,它只标记带有输入验证错误类的第一个单选按钮.
例:
<p>@Html.RadioButtonFor(x => x.Choices, SomeEnum.OptionOne)</p>
<p>@Html.RadioButtonFor(x => x.Choices, SomeEnum.OptionTwo)</p>
Run Code Online (Sandbox Code Playgroud)
产生的HTML:
<p><input class="input-validation-error" data-val="true" data-val-required="required text" type="radio" name="Choices" value="OptionOne" /></p>
<p><input type="radio" name="Choices" value="OptionTwo" /></p>
Run Code Online (Sandbox Code Playgroud)
我希望两个单选按钮都能获得验证错误级别,否则可能会使用户选择的选项存在偏差.
我能做什么?
我有一个表单,并且启用了不显眼的验证.默认情况下,在提交方法中,客户端验证会被触发,并且(如果您有任何错误)表单如下所示:

甚至在将任何数据发送到服务器之前就会进行验证.
现在,如果要使用$ .ajax方法,则此行为不起作用.客户端验证不起作用.您必须手动检查javascript中的所有字段,失去DataAnnotations的所有优点.
有没有更好的解决方案?我可以使用jquery的submit(),但我猜它没有像$ .ajax这样的回调.
jQuery Validation使验证电子邮件地址变得简单:
$("someForm").validate({
rules: {
SomeField: {
required: true,
email: true,
remote: {
type: "POST",
url: "CheckEmail"
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这使得SomeField成为必需,必须格式化为电子邮件地址,并且还执行对CheckEmail操作的远程调用(检查重复项).
我喜欢让事情变得尽可能简单,所以我可以用Data Annotations做很多相同的事情:
public class RegisterModel {
[Required]
[Remote("CheckEmail", "Home", HttpMethod="POST")]
public string SomeField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ASP.net MVC 3/Data Annotations是否有内置/简单的方法来验证以确保电子邮件地址的格式正确?
如果可能的话,我希望它能产生不引人注目的javascript.
c# unobtrusive-javascript data-annotations unobtrusive-validation asp.net-mvc-3
我在这里问类似的问题,但是在这个问题中我使用了另一个实现,正是这种方式下面的代码显示了我的实现:
模型:
public class Department {
public long Id { get; set; }
[IsDateAfter("Date2", true, ErrorMessage = "O My")]
public DateTime Date1 { get; set; }
public DateTime Date2 { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
自定义验证器:
public sealed class IsDateAfter : ValidationAttribute, IClientValidatable {
private readonly string testedPropertyName;
private readonly bool allowEqualDates;
public IsDateAfter(string testedPropertyName, bool allowEqualDates = false)
{
this.testedPropertyName …Run Code Online (Sandbox Code Playgroud) javascript asp.net-mvc razor unobtrusive-validation asp.net-mvc-3
使用MVC 4和KnockoutJS.我可以使用自定义敲除绑定绑定不显眼的验证吗?我目前正在使用模板重新绑定验证afterRender.我很乐意让它自动添加绑定.像这样:
ko.bindingHandlers.egtZipRep = {
init: function (element, valueAccessor, allBindingsAccessor, context) {
$(element).inputmask("99999", { "placeholder": "?" });
egtUniqueNameBinding(element, ++ko.bindingHandlers['uniqueName'].currentIndex);
applyValidationRules(element); // Is it possible to do this here?
ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, context);
}
};
Run Code Online (Sandbox Code Playgroud)
我整天都在修整它.如果不是非常低效,我就做不到.
我目前这样做的方式如下.也许我应该对此感到高兴.但我猜之前有人试过这个.
self.ReferenceAfterRender = function (element) {
bindUnobtrusiveValidation(element);
}
// Bind validation on new content
function bindUnobtrusiveValidation(element) {
// Bind to fields - must be called everytime new field is created
$.validator.unobtrusive.parseDynamicContent(element);
}
$.validator.unobtrusive.parseDynamicContent = function (selector) {
// Use the normal unobstrusive.parse method …Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery Validation Plugin,v1.11.0,2/4/2013和jquery.validate.unobtrusive.js.
我想我面临数字字段范围验证的错误:验证将字符串值与最小字符串和最大字符串进行比较,而不是将字段数与最小数字和最大数字进行比较.
摄制步骤:
您使用以下HTML设置验证范围1-1000:
<input name="Data.MaxConcurrentInstances" class="text-box single-line" id="Data_MaxConcurrentInstances" type="number" value="" data-val-number="The field Max concurrent instances must be a number." data-val="true" data-val-range-min="1" data-val-range-max="1000" data-val-range="The field Max concurrent instances must be between 1 and 1000.">
Run Code Online (Sandbox Code Playgroud)
您设置测试字段值:7.
预期结果:验证成功.没有错误.
实际结果:验证失败.内部原因:它失败,因为字母串字符串"7"在字符串"1"和"1000"之后,而不是在它们之间.
问题:这个错误是否已知?最好的解决方法是什么?
jquery unobtrusive-javascript jquery-validate unobtrusive-validation
我有所有脚本的布局页面,如下所示.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Site</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<some custom css>
<modernizr>
<script src="~/Scripts/Jquery/jquery-1.9.1.js"></script>
<script src="~/Scripts/Jquery/jquery-ui-1.10.2.js"></script>
<script src="~/Scripts/Jquery/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/Jquery/jquery.validate.js"></script>
<script src="~/Scripts/Jquery/jquery.validate.unobtrusive.js"></script>
<some custom scripts>
<bootstrap scripts>
<knockout scripts>
</head>
<body>
@RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后我有我的注册表格,如图所示
@model Mysite.Models.Account.Account
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "register" }))
{
@Html.AntiForgeryToken();
<h1>Login</h1>
@Html.ValidationSummary();
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Address1)
@Html.EditorFor(m => m.Address2)
@Html.EditorFor(m => m.Phone1)
<input type="button" …Run Code Online (Sandbox Code Playgroud) asp.net-mvc jquery jquery-validate client-side-validation unobtrusive-validation
我有关于这个问题的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) 我正在更改创建表单以成为模式对话框和jquery Unobtrusive验证停止工作,不知道如何解决它.
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({});
});
});
Run Code Online (Sandbox Code Playgroud)
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 …Run Code Online (Sandbox Code Playgroud) asp.net-mvc data-annotations unobtrusive-validation asp.net-mvc-viewmodel