这是一个经典的登录流程.用户可以在"新用户"或"现有用户"之间进行选择.如果用户是新用户,则登录框中的名称应该针对服务器进行验证以查看用户名是否是唯一的,如果是现有用户,则将跳过此检查,因为我们希望已经(当然)采用了用户名.
我在viewmodel上添加了一个[Remote]属性,并为新/退出用户添加了radiobutton作为"附加字段".这样,如果是现有用户,远程验证将返回true,如果不是,则检查数据库,以查看是否采用了用户名.
这很有效,除非用户在输入用户名后决定更改单选按钮(新/现有)(并且远程验证已运行).由于远程验证仅在用户名更改时自动运行(即具有[Remote]属性的属性),因此单独更改单选按钮不会再次运行.
所以我的问题是,如何强制远程验证再次运行?我通过在用户名输入字段上触发更改/焦点/模糊事件来尝试通常的黑客攻击,但是不会触发调用.我认为增加的单选按钮类似[远程],但是这将事情真的有两个相等的寻找错误信息,放置在同一个绝对位置复杂化.
有没有办法触发重新验证?
我有一个带有数据注释的模型,我是一个使用knockout模板绑定和映射插件的viewmodel动态绑定.我正在尝试对我的模型进行不显眼的客户端验证.在这种情况下我们如何做到这一点.任何帮助/建议?
public class MyUser
{
[Required]
[StringLength(35)]
public string Username { get; set; }
[Required]
[StringLength(35)]
public string Forename { get; set; }
[Required]
[StringLength(35)]
public string Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我是使用ajax动态模板绑定MyUser列表.
public JsonResult TestKnockout()
{
IList<MyUser> myUserList = new List<MyUser>();
myUserList.Add(new MyUser { Username = "ajohn", Surname = "surname" });
myUserList.Add(new MyUser { Username = "ajohn1", Surname = "surname1" });
return Json(myUserList, JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<form id="Userform" action='@Url.Action("Save", "Home")' data-bind="template: {name: 'UserTemplate', foreach:UserList}">
<input type="Submit" name="name" …Run Code Online (Sandbox Code Playgroud) unobtrusive-javascript data-annotations unobtrusive-validation knockout-mapping-plugin knockout.js
我试图在Orchard模块中进行不引人注意的客户端验证,但我遇到了问题.
在这个例子中,我只是尝试使用Html.TextBoxFor()在文本框字段上强制执行RequiredAttribute.
它看起来好像Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider阻止了HTML5输入属性的呈现,具体来说:
data-val
data-val-required
Run Code Online (Sandbox Code Playgroud)
对于标准DataAnnotations RequiredAttribute.jQuery.validate.unobtrusive需要这些属性才能工作.
LocalizedModelValidatorProvider将RequiredAttribute映射到LocalizedRequiredAttribute,因此在渲染用LocalizedRequiredAttribute修饰的模型属性的文本框输入时,Orchard ViewEngine中的错误(或未实现的功能)可能是多少?
我怀疑这不会发生:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
Run Code Online (Sandbox Code Playgroud)
(来自System.Web.Mvc.Html.InputExtensions)
我目前正在运行Orchard 1.3.9.
注意:一个hacky解决方法是删除OrchardStarter模块中LocalizedModelValidatorProvider的注册,并默认返回标准MVC 3提供程序,尽管如果可能的话我不想打扰Orchard源(更不用说我可能需要本地化)消息在某些时候)......
jquery-validate orchardcms data-annotations unobtrusive-validation asp.net-mvc-3
我正在使用Visual Studio 2012,我无法获得自定义属性客户端逻辑,以便以较小的规模重现,我创建了一个新的MVC 4项目,我创建了以下模型和属性,永远不会验证
public class MyModel
{
public int Id { get; set; }
[Required]
public string LastName { get; set; }
[NeverValid(ErrorMessage="Serverside Will Never Validate")]
public string FirstName { get; set; }
}
public class NeverValidAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return false;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
return new ValidationResult(this.ErrorMessage, new[] { validationContext.MemberName });
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage …Run Code Online (Sandbox Code Playgroud) asp.net jquery jquery-validate unobtrusive-validation asp.net-mvc-4
我正在更改创建表单以成为模式对话框和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
我正在利用MVC3附带的不引人注目的验证创建一个基于jQuery Mobile(Alpha 3)的ASP.NET MVC 3应用程序.当直接访问页面时(Url中没有哈希),验证工作完美.但是,当您导航到该页面时,jQuery Mobile使用Ajax Navigation动态加载它(在Url中显示哈希)并且验证停止工作.
以下是使用中的代码示例:
模型:
[Required(ErrorMessage = "Missing value")]
[DisplayName("Property Display Name")]
public int? PropertyName { get; set; }
Run Code Online (Sandbox Code Playgroud)
查看(剃刀):
@Html.LabelFor(model => model.PropertyName)
@Html.TextBoxFor(model => model.PropertyName)
@Html.ValidationMessageFor(model => model.PropertyName)
Run Code Online (Sandbox Code Playgroud)
生成的HTML:
<label for="PropertyName">Property Display Name</label>
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span>
Run Code Online (Sandbox Code Playgroud)
之前可能已加载其他页面,并且HTML元素不再具有唯一ID.除了滚动我自己的Html Helper类来生成Label,TextBox和ValidationMessage的HTML之外,还有什么方法可以处理这种情况吗?
asp.net-mvc jquery-validate jquery-mobile unobtrusive-validation
我已经搜索了很长一段时间,但未能找到答案.
我正在使用asp.net MVC 3进行不显眼的验证.我的模型与数据注释绑定,用于简单验证(必填字段,正则表达式等).但是,我在服务器上进行了更复杂的验证.我正在做一个ajax帖子,它返回来自我的域模型的验证add'l消息.我想要做的就是将表单上的验证消息放在现有表单的位置.我不想使用部分视图,因为我真正得到的是消息回来,并且不需要刷新整个视图.另外,我没有在表单中添加新规则或新输入,因此$ .validator.unobtrusive.parse将无效.这些只是我想要放在表单上的消息.$ .post调用返回一个消息列表,该字段受影响的字段和验证消息.
这就是我想要做的事情
$.post(url, { someData}, function (data) {
for (message in data.Messages) {
$("#form").validate().addMessage(message.Field, message.Text);
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
根据请求,这里是返回JSON的示例,它非常简单.
{"id":0,"messages":["Level":0,"Message":"Style is required","Name":"Style"}],"operationResult":false}
Run Code Online (Sandbox Code Playgroud)
messages是包含严重性级别,错误所属属性和错误消息的对象列表.我将使用messages对象中的名称来匹配表单上的所需位置.
我使用MVC 3模型验证属性和jquery unobtrusive来显示验证错误消息也在表单提交时使用脚本返回确认.所以我需要检查所有字段是否有效然后返回确认:有些事情如下面的伪脚本:
$('div.FormNeedConfirm form').submit(function () {
if ($(this).validate() == true) {
var Message = $('#FormConfirmMessage').val();
return confirm(Message);
}
});
Run Code Online (Sandbox Code Playgroud)
但我不知道if条件到底应该是什么.你的建议是什么?
javascript validation jquery unobtrusive-validation asp.net-mvc-3
我创建了自己的条件验证属性,通过继承RequiredAttribute和实现来验证客户端和服务器上的MVC模型IClientValidatable.我的想法是,如果我的模型上的布尔属性为true,则需要另一个属性.在视图中,这表示为一个复选框,用于指示是否需要填写文本框.
除了用户执行以下操作时,这非常有效:
我想在选中或取消选中复选框时重新验证表单,或者甚至更好地重新验证该字段,以便不再显示错误消息.我尝试过调用jQuery validate()方法的各种组合,但似乎没有什么能够重新运行验证.
我使用以下javascript来设置我的验证功能和相关的不显眼的适配器.
$.validator.addMethod(
"requiredif",
function(value, element, parameters) {
var selector = "#" + parameters["dependentpropertyname"];
var triggerValue = parameters["triggervalue"].toString().toLowerCase();
var actualValue = $(selector).is(":checked").toString().toLowerCase();
if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters);
return true;
});
$.validator.unobtrusive.adapters.add(
"requiredif",
["dependentpropertyname", "triggervalue"],
function(options) {
options.rules["requiredif"] = {
dependentpropertyname: options.params["dependentpropertyname"],
triggervalue: options.params["triggervalue"]
};
options.messages["requiredif"] = options.message;
}
);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我在用 ASP.NET 5 MVC RC1
我的ASP.NET MVC使用的jquery验证插件是默认的ASP.NET 5模板项目使用的标准jquery.validate.js.
/*!
* jQuery Validation Plugin v1.14.0
*
* http://jqueryvalidation.org/
*
* Copyright (c) 2015 Jörn Zaefferer
* Released under the MIT license
*/
Run Code Online (Sandbox Code Playgroud)
和jquery.validation.unobtrusive.js
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
Run Code Online (Sandbox Code Playgroud)
我在下面提供了一个简单的必填字段示例来演示我的问题.
视图模型:
public class TierImportStatusUpdateViewModel
{
[Required]
public string String1 { get; set; }
[Required]
public string String2 { get; set; }
//more fields
}
Run Code Online (Sandbox Code Playgroud)
CSHTML:
@model MyViewModel …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×4
jquery ×4
asp.net ×2
ajax ×1
javascript ×1
knockout.js ×1
orchardcms ×1
validation ×1