我已经使用MVC 3不引人注意的验证实现了远程验证,如下所示
该模型
public class MyViewModel {
[Remote("ValidateAction", "Validation")]
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器
public partial class ValidationController : Controller
{
public virtual JsonResult ValidationAction(string aTextToValidate)
{
if(aTextToValidate == /* some condition */)
return Json(true, JsonRequestBehavior.AllowGet);
return Json("This is not valid, Try Again !", JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)
风景
@using (Html.BeginForm() {
@Html.TextBoxFor(m => m.Text)
@Html.ValidationMessageFor(m => m.Text)
}
Run Code Online (Sandbox Code Playgroud)
就是这样,一切正常,但ValidationAction会在每次按键时触发,这是不理想的,我想只是在元素失去焦点时触发,但无法想象如何做到这一点
实际上我已经注意到,默认情况下,验证会触发一次.lur第一次元素失去焦点,但是当尝试纠正它时,验证然后触发onKeyUp.我认为这是预期的功能,并且考虑它可能非常有用.但是,知道是否可以修改此行为会很有用
我请求ASP.net MVC视图到现场框和视图中包含已标记了属性的表单字段由JQuery的不显眼的验证插件使用.
客户端脚本不工作然而,我的理论是,因为它的验证框架只被上早已由MVC视图已经被加载到现场箱的时间通过网页加载触发.
那么我怎样才能让验证框架知道它有新的表单字段来修复?
干杯,伊恩.
我使用MVC3模型Validation和Unobtrusive进行显示验证,并尝试找到克隆元素和验证的方法.
这是我的查看代码:
<div id="d1" class="Addable">
@Html.EditorFor(model => model.CellPhone)
@Html.ValidationMessageFor(model => model.CellPhone)
</div>
<input type"button" class="AddE" />
Run Code Online (Sandbox Code Playgroud)
而HTML Dom则是:
<div class="Addable" id="d1">
<input type="text" value="" name="CellPhone" id="CellPhone" data-val-required="Req."
data-val-regex-pattern="^04[1234][0-9]{6}$" data-val-regex="notValid" data-val="true"
class="text-box single-line valid">
<span data-valmsg-replace="true" data-valmsg-for="CellPhone"
class="invalid-side-note field-validation-valid"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
所以我使用以下脚本来克隆具有更改名称的新脚本,例如数组名称:
//Add new Addable div
$('.AddNewE').click(function () {
var Target = $('.Addable:first');
var TargetId = $(Target).attr('id');
var Count = $('.Addable#' + TargetId).size();
var CloneTarget = $(Target).clone();
CloneTarget.find('input').val('');
CloneTarget.insertAfter('.Addable:last');
var TargetName = $(Target).find('input').attr('name');
if (Count == 1) {
var CloneName = TargetName …Run Code Online (Sandbox Code Playgroud) validation asp.net-mvc jquery unobtrusive-validation asp.net-mvc-3
在我的ASP.NET MVC 4应用程序中,我试图使用Fluent Validation进行不显眼的客户端验证.
<script src="/Scripts/jquery.validate.min.js" type="text/javascript">
</script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript">
</script>
Run Code Online (Sandbox Code Playgroud)
我在创建新的ASP.NET MVC 4应用程序时提供了VS2010提供的这两个.js文件.我还在我的web.config文件上启用了客户端验证.
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
据我所知,当启用客户端验证和不引人注目的JavaScript时,带有客户端验证规则的输入字段包含data-val ="true"属性,以触发不显眼的客户端验证.我在输入字段中有这些字段.
例如,
<input class="input-validation-error" data-val="true" data-val-
required="error text here" id="purchasePrice"
name="PurchasePrice" type="text" value="">
<span class="field-validation-error error" data-valmsg-for="PurchasePrice"
data-valmsg-replace="true">'Purchase Price' must not be empty.</span>
Run Code Online (Sandbox Code Playgroud)
但是,当我提交表单时,它会发布到控制器,我的模型会在我的控制器代码而不是客户端上进行检查.
编辑:
这是我的表格开头标签.
@using (Html.BeginForm("Create", "Product", FormMethod.Post,
new { enctype = "multipart/form-data", @class = "mainForm",
@id = "productCreateForm" }))
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
我试图找到网上可用的信息,但无法将它连接在一起.我有一个使用登录页面的应用程序.现在我没有将视图绑定到任何模型.但是我有两个输入(用户名和密码).我想解雇Asp.net Mvc附带的jquery不显眼的验证功能.以下是样本:
带有Twitter引导程序的骨干模板,它是登录模板(下划线模板引擎).
@using (@Html.BeginForm("Login", "Home", FormMethod.Post, new { @class = "form-horizontal" }))
{
<div class="modal-body">
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
@*<input type="text" id="inputEmail" placeholder="Email">*@
@Html.TextBox("Email", "", new { @placeholder = "Email" })
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<input type="password" id="inputPassword" placeholder="Password">
</div>
</div>
<div class="control-group">
@*<div class="controls">
<label class="checkbox">
<input type="checkbox"> Remember me
</label>
<button type="submit" class="btn">Sign in</button>
</div>*@
</div>
</div>
<div class="modal-footer">
@*<a class="btn" href="#" id="closeBtn">Close</a>*@ <button type="submit" class="btn btn-primary" >Login</button>
</div> …Run Code Online (Sandbox Code Playgroud) jquery-validate unobtrusive-validation backbone.js asp.net-mvc-3 twitter-bootstrap
我对元素上的JQuery .valid()方法调用有一些问题.我有以下代码.有人用ASP.net MVC和不引人注目的javascript管理这个吗?
Javascript代码
$(function() {
$('#anchor').click(function () {
if ($('#myform').valid()) {
alert("it's valid");
}
});
});
Run Code Online (Sandbox Code Playgroud)
HTML视图输出
<div class="editor-label">
<label for="FirstName">First name</label>
</div>
<div class="editor-field">
<input data-val="true" data-val-required="The First name field is required." id="FirstName" name="FirstName" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="FirstName" data-valmsg-replace="true"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样但看不出任何问题.当提交按钮被命中时,表单本身正确验证.
我在页面中有两种形式。我希望第一种形式使用非干扰式验证(因为它是由MVC自动生成的),但是我手动编写的第二种形式则不要使用非干扰式验证。
这是一些代码:
@using (Html.BeginForm("Add", "Contacts", FormMethod.Post, new { id = "AddForm" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Datos Contacto</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ContactDepartmentID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ContactDepartmentID, (List<SelectListItem>)ViewBag.ContactDepartments)
@Html.ValidationMessageFor(model => model.ContactDepartmentID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Sex)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Sex, (List<SelectListItem>)ViewBag.Sexs)
@Html.ValidationMessageFor(model => model.Sex)
</div>
</fieldset>
<br />
@Html.HiddenFor(model => model.SerializedEmails, new { data_bind = "value: ko.toJSON($root.emails())" })
@Html.HiddenFor(model => model.SerializedPhones, …Run Code Online (Sandbox Code Playgroud) 在jquery.validate.unobtrusive中覆盖ErrorPlacement函数的正确方法是什么?
纵观jquery.validate.unobtrusive.js脚本看来,开发商有意将允许您通过设置$ jQval.unobtrusive.options应用自己的ErrorPlacement功能.
在定义errorPlacement函数的validationInfo(form)函数中,我们看到对execInContext("errorPlacement",arguments)的调用.
看来如果我们在$ .validator.unobtrusive.options下创建一个errorPlacement函数,那么就会调用它.
$.validator.unobtrusive.options = {
errorPlacement: function () {
console.log("hello");
}
};
Run Code Online (Sandbox Code Playgroud)
问题是必须在jquery.validate.js之后和引用jquery.validate.unobtrusive.js之前配置它.否则$ jQval.unobtrusive.options为null,并且不会再次设置$ form.data(data_validation,result).
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form),
defaultOptions = $jQval.unobtrusive.options || {},
execInContext = function (name, args) {
var func = defaultOptions[name];
func && $.isFunction(func) && func.apply(form, args);
}
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: defaultOptions.errorClass || "input-validation-error",
errorElement: defaultOptions.errorElement || "span", …Run Code Online (Sandbox Code Playgroud) 我正在使用MVC 4,我希望能够从表中的行集合中验证单行,以确保正确输入字段并通过验证.
属性在模型上正确应用,例如:
[Required]
[MaxLength(50)]
[MinLength(5)]
public string Name {get; set;}
Run Code Online (Sandbox Code Playgroud)
现在,在客户端 - 如何在调用AJAX方法之前启用客户端验证?
为了增加更多的复杂性 - 我有一个按钮,你可以动态地向表中添加一行,填写字段,最后点击更新按钮,它将通过ajax进行POST.但在此帖之前,我想在客户端验证该特定行.
我怎样才能做到这一点?
谢谢
我正在尝试使用nameof向ModelState添加错误:
@Html.ValidationMessageFor(m => m.Foo.Bar)
Run Code Online (Sandbox Code Playgroud)
在视图中,这已被标记name为Foo.Bar.
当我添加模型状态错误时,我必须将该错误键入a name,所以我使用nameof(Foo.Bar)- 但是这只是Bar在我需要时给了我Foo.Bar.现在我可以硬编码,Foo.Bar但我宁愿使用强类型的方法.我有什么选择?