给定一个如下所示的ViewModel:
public class Login {
[Required]
public string Username { get; set; }
[Required, CustomValidator]
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
像这样的视图(Razor语法在这里):
@Html.TextBoxFor(f => f.Password)
Run Code Online (Sandbox Code Playgroud)
我得到以下标记:
<input type="text"
value=""
data-val-required="This field is required." />
Run Code Online (Sandbox Code Playgroud)
但是我希望它还包含我的自定义验证器的'data-'属性.
我想要这样的东西:
<input type="text"
value=""
data-val-required="This field is required."
data-val-customvalidator="XYZ" />
Run Code Online (Sandbox Code Playgroud)
如何使用ASP.NET MVC 3.0实现这一目标?
例如,我是否需要在自定义验证器上添加一些特殊属性?或者在某处注册?
我的User模型的email属性上有Remote属性.当我创建一个新用户时,它可以创建并告诉用户电子邮件已在使用中.现在我在编辑表单中遇到问题(如果用户想要更新值).它告诉用户他/她的电子邮件已被使用,我不希望它在正在使用的电子邮件是注册给用户的电子邮件时给出该消息.如何调整Remote属性以表现?
我有一个简单的下拉列表,列表中的第一项有一个空值.如果我没有在列表中选择任何内容,则客户端验证会忽略它.我使用注释属性在模型上根据需要设置了该字段.
@Html.DropDownListFor(model => Model.CCPayment.State, UnitedStatesStates.StateSelectList)
[Required(ErrorMessage = "State is Required.")]
public string State
{
get
{
return _state;
}
set
{
_state = value;
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我错过了什么吗?
validation jquery unobtrusive-validation asp.net-mvc-3 drop-down-menu
我正在使用Steve Sanderson的BeginCollectionItem实用程序来渲染要在MVC3中编辑的对象列表,并且当您从迭代器渲染整个集合时它非常有用.当我尝试将一个新项添加到集合中时,我的问题就出现了,并返回表示该对象的html.出于某种原因,我的数据注释没有在代码中出现的html中呈现.
有没有可用的修复程序,或者是否有任何不同的东西,sans不得不亲自编写验证,我可以做什么来解决这个问题?
谢谢.
在MVC3应用程序中,使用jquery不显眼的验证,以及带有[Remote]验证器的视图/模型:我正在尝试禁用提交按钮并在远程验证期间显示等待图标,并且当有效表单提交给服务器时.我以为我已经把它钉在了IE8上.
问题是,当表单无效时,GC和FF没有触发表单的提交事件,因此我在此事件期间禁用了提交按钮.但是,当表单无效时,IE8会触发此事件,导致用户永远无法再次单击它.(IE8不提交表单,但事件被解雇.)
我尝试将一个函数附加到提交按钮的单击事件.在那里,我禁用了提交按钮,显示了等待图标,并且有:
$('[data-app-form-submit-button="true"]').live('click', function (e) {
var form = $(this).parents('form');
var icon = form.find('[data-app-form-submitting-icon="true"]');
icon.show();
$(this).attr('disabled', 'disabled');
$.ajaxSetup({ async: false });
var isValid = form.valid();
$.ajaxSetup({ async: true });
alert(isValid);
});
Run Code Online (Sandbox Code Playgroud)
问题是,ajax设置调用并没有真正关闭异步.如果我将它移出click函数,但它会禁用所有内容的异步.相反,页面立即警告"true",通过在远程验证操作方法上设置断点进行测试.
有任何想法吗?
附加说明:
我忘了提一下,在IE8中,当有问题的文本框未能在客户端上进行验证时,才会触发提交事件.例如,如果它不需要或正则表达式,则触发submit().对于远程验证操作方法,不会触发它.但是,一旦客户端验证失败,后续远程验证也会触发IE8提交事件.
对Russ Cam的回应(评论#1)
以下是viewmodel中的相关代码:
public class SignUpForm : IValidatableObject
{
[DataType(DataType.EmailAddress)]
[Display(Name = "Email Address")]
[Required(ErrorMessage = "Email Address is required.")]
[RegularExpression(@"^(email regex here)$",
ErrorMessage = "This is not a valid email address.")]
[Remote("Validate", "ControllerName", "AreaName", HttpMethod = "POST")]
public string EmailAddress { get; set; …Run Code Online (Sandbox Code Playgroud) jquery jquery-validate unobtrusive-validation asp.net-mvc-3 remote-validation
我有一个日期字段(我使用jquery ui datepicker)在我格式化的表单中,如下所示:
视图模型
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime FooDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
视图
@Html.EditorFor(m => m.FooDate)
Run Code Online (Sandbox Code Playgroud)
这正确地显示了我想要它的日期,例如 09-Nov-2011
我收到的问题发生在我按提交时.它一直告诉我日期无效....这是有效的,你这个蠢事!
有什么办法,我可以得到jquery/unobtrusive javascript忽略这个字段或允许这种格式通过?到目前为止,我可以让表单工作的唯一方法是,如果我不格式化日期,或使用{0:d}作为日期格式.
编辑:我已经创建了一个完全独立的布局+视图+控制器+模型来测试这个愚蠢的东西.仍然无法在IE/Safari中运行.我有来自nuget的最新jquery.validate/unobtrusive文件.
我layout是空的.它只是加载以下文件:
"jquery-1.7.min.js"
"jquery-ui-1.8.16.min.js"
"jquery.validate.min.js"
"jquery.validate.unobtrusive.min.js"
Run Code Online (Sandbox Code Playgroud)
我的TestViewModel很简单:
public class TestViewModel
{
[Display(Name = "Test Date:")]
[DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? TestDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的TestController如下:
public class TestController : Controller
{
public ActionResult Index()
{
var m = new TestViewModel();
m.TestDate = DateTime.Now;
return View(m);
} …Run Code Online (Sandbox Code Playgroud) asp.net-mvc datepicker jquery-validate unobtrusive-validation asp.net-mvc-3
在我正在开发的页面中,我有一个"电子邮件"字段和"ConfirmEmail"字段.并且要求是进行不区分大小写的比较.
我可以创建一个自定义属性并扩展内置的"Compare"属性的行为.这适用于服务器端.
但我无法在客户端实现它.我确信我们必须做一些额外的事情来使不引人注目的jquery做一个不区分大小写的比较.
使用MVC4启用客户端和不显眼验证,我试图了解验证如何确定输入的DateTime值是否有效.
在我的应用程序中,此格式化日期有效:01/31/2013,如果我输入:31/01/2013,我得到:
字段[fieldId]必须是日期
它如何确定什么是有效日期?
asp.net-mvc jquery-validate unobtrusive-validation asp.net-mvc-3 asp.net-mvc-4
我的Model类中有以下代码:
[Range(1, 100)]
public decimal Price { get; set; }
Run Code Online (Sandbox Code Playgroud)
最近升级(我假设)jquery.validate到1.11.0后,即使输入有效值,我也收到错误.如果我在web.config中关闭客户端验证 - 工作正常.所有其他属性(StringLength,Required)工作正常.生成的HTML如下(为清晰起见,添加了换行符):
<input class="text-box single-line" data-val="true"
data-val-number="The field Price must be a number."
data-val-range="The field Price must be between 1 and 100."
data-val-range-max="100" data-val-range-min="1"
data-val-required="The Price field is required." id="Price" name="Price"
type="text" value="" />
Run Code Online (Sandbox Code Playgroud)
我很确定它之前有效...除了jquery.validate中的错误之外别无所求.
jquery-validate data-annotations unobtrusive-validation asp.net-mvc-4
我在asp.net mvc 5项目中使用jquery.unobtrusive和jquery.validate库来验证客户端的用户注册.
在浏览器上我收到此错误:
Uncaught TypeError: $(...).parents(...).andSelf is not a function
at Object.parse (jquery.validate.unobtrusive.js:211)
at HTMLDocument.<anonymous> (jquery.validate.unobtrusive.js:392)
at mightThrow (jquery-3.1.1.js:3570)
at process (jquery-3.1.1.js:3638)
Run Code Online (Sandbox Code Playgroud)
我在我的项目中使用jquery 3.1.1.它似乎是版本问题.
任何想法我该如何解决?