我正在使用ASP.NET MVC 3中新的不显眼的验证功能验证表单.
因此,我没有编写代码来设置jQuery验证以开始验证我的表单.这一切都是通过加载jQuery.validate.unobtrusive.js库来完成的.
不幸的是,我需要打个招呼'你确定吗?' 表单有效但在提交之前的消息框.使用jQuery验证,你会在初始化时添加选项handleSubmit:
$("#my_form").validate({
rules: {
field1: "required",
field1: {email: true },
field2: "required"
},
submitHandler: function(form) {
if(confirm('Are you sure?')) {
form.submit();
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是在使用不显眼的库时,您不需要初始化.
在这种情况下,我可以在哪里/如何添加提交处理程序?
谢谢
客户端不显眼验证对动态插入的表单字段有效所需的完整步骤是什么?
ASP.NET MVC 3使用动态内容进行不显眼的客户端验证 - 他需要在生成的HTML中显示不显眼的验证属性,并通过调用BeginForm
关于AjaxForm的ASP.Net MVC 3验证 - 提问者使用的Ajax.BeginForm是使用MicrosoftAjax而不是JQuery.validation.
PartialView和不显眼的客户端验证无法正常工作 - 他遇到了不显眼的验证属性的问题,这些属性没有显示和覆盖ViewContext.FormContext作为变通方法.
ASP.NET MVC 3:在布局上使用BeginForm时生成不显眼的验证 - 不显示在HTML中的不显眼的验证属性的解决方法
Brad Wilson 在ASP.NET MVC 3中的不引人注目的客户端验证
好的,这是交易,我在SO上看到了一些关于这个问题的帖子,但没有什么对我有用.
基本上,我选择从部分视图加载的下拉列表,我试图根据先前选择的下拉列表过滤每个后续下拉列表的内容.
如果我只是调用div容器中的局部视图,并加载页面,则数据注释的验证工作正常,主要是必需属性.
但是,如果我尝试通过这里设置的AJAX加载相同的部分,则必需的验证不起作用,任何人都可以在此之后发布表单和KABOOM.
我发现有人说在Success回调中你需要让客户端验证器重新分析表单,我正在尝试,但它似乎没有工作.
我有一个看起来像这样的视图......
@model Area51.Models.Workflow.AddReportableItemToBatchActionModel
@{
ViewBag.Title = "Add Reportable Item to Batch";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript">
$(function () {
var fadeDelay = 150;
$(".jqDatePicker").datepicker({
dateFormat: 'm/d/yy',
onSelect: function (date) {
$("#categoryContainer").show(fadeDelay);
}
});
$('#Category').change(function () {
RetrieveItemsForCategory();
$("#itemContainer").show(100);
});
$('#Item').live('change', function () {
RenderPartialForUOMByItem();
});
function RetrieveItemsForCategory() {
var category = $("#Category :selected").val();
$.ajax({
type: "POST",
url: '@Url.Action("RenderPartialForLocationItemsByCategory","BatchWorkflow")',
data: 'category=' + category,
success: function (result) {
$("#itemContainer").html(result.toString());
$("#itemContainer").show(100);
RebindValidation();
},
error: function …Run Code Online (Sandbox Code Playgroud) 给定以下viewmodel:
public class SomeViewModel
{
public bool IsA { get; set; }
public bool IsB { get; set; }
public bool IsC { get; set; }
//... other properties
}
Run Code Online (Sandbox Code Playgroud)
我希望创建一个自定义属性,验证至少有一个可用属性为true.我设想能够将属性附加到属性并分配组名称,如下所示:
public class SomeViewModel
{
[RequireAtLeastOneOfGroup("Group1")]
public bool IsA { get; set; }
[RequireAtLeastOneOfGroup("Group1")]
public bool IsB { get; set; }
[RequireAtLeastOneOfGroup("Group1")]
public bool IsC { get; set; }
//... other properties
[RequireAtLeastOneOfGroup("Group2")]
public bool IsY { get; set; }
[RequireAtLeastOneOfGroup("Group2")]
public bool IsZ { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望在表单提交之前在客户端验证表单更改中的值,这就是为什么我更愿意在可能的情况下避免使用类级别属性. …
asp.net-mvc jquery-validate unobtrusive-validation asp.net-mvc-3
不显眼的客户端验证规则中的验证类型名称必须是唯一的.以下验证类型不止一次出现:必需
这是指EmailAddress属性,这里:
public class LoginModel
{
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[AdditionalMetadata("Style", "Wide")]
public string EmailAddress { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
[AdditionalMetadata("Style", "Wide")]
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我这里没有两次使用相同类型的验证规则.这在本地工作正常,但在部署到服务器时则不行.这是怎么回事?
我确实添加了对DataAnnotationExtensions(http://dataannotationsextensions.org)的引用,是否会导致问题?
编辑:删除引用没有解决问题.似乎有些东西可能搞砸了IIS配置?
我有我放的Model1的View,Ajax.BeginForm()在这个View中我有Part2和Model2 Ajax.BeginForm().所以只有在第一种形式工作unobtrusive validation.为什么只在第一次表单工作验证?
第一个视图
@model Model1
@using (Ajax.BeginForm("Action1","Controller",null,new AjaxOption(){ onSuccess = "alert('=)')"},null)
{
<intput type="submit" value="Save" />
}
Model2 model2 = new Model2();
@Html.EditorFor(m=>model2)
Run Code Online (Sandbox Code Playgroud)
**在Model2视图中我有.**
@model Model2
@using (Ajax.BeginForm("AddStreet","Controller",new AjaxOption(){onSuccess = "alert('=)'")},option,null)
{
@Html.LabelFor(m => Model.Name):
@Html.TextBoxFor(m => Model.Name)
@Html.ValidationMessageFor(m => Model.Name)
<intput type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
谢谢@Darin Dimitrov的回答.
我DataAnnotations用于在ASP.NET MVC应用程序中ViewModel使用jquery.validate.unobtrusive和在服务器端验证我的客户端.
不久前,我发现我可以写这样的验证:
[Required(ErrorMessage = "{0} is required")]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
这样我就可以在配置或资源中轻松定义一些通用字符串,并始终使用它DataAnnotations.因此,将来在整个应用程序中更改验证消息会更容易.
另外我知道有一个FluentValidation库允许向现有的验证规则添加验证规则ViewModel.我知道添加/编辑有一个问题ViewModels,可能有类似的字段,但ValidationRules不同.
客户端验证的另一个问题是,应该解析新添加到DOM的 html (使用ajax请求)以启用验证.我是这样做的:
$('#some-ajax-form').data('validator', null);
$.validator.unobtrusive.parse('#some-ajax-form');
Run Code Online (Sandbox Code Playgroud)
所以我有一些问题:
ViewModel验证问题的最佳方法?我可以使用DataAnnotations与FluentValidation或单独添加和编辑ViewModels仍然是最好的选择?我不是问如何创建自己的DataValidators我知道怎么做.我想方设法如何以更高效和易维护的方式使用它们.
c# validation asp.net-mvc data-annotations unobtrusive-validation
我想要什么
我希望在我的View中使用我选择的事件触发客户端验证.它可能是'onblur'可能是另一个按钮,但不是提交按钮.
相关链接
将不显眼的jquery验证应用于ASP.Net MVC中的动态内容
我试过的
鉴于各种事件监听器,我已经解雇了以下方法而没有运气:
$(selector).validate();
$(selector).valid();
$.validator.unobtrusive.parseDynamicContent(selector);
$.validator.unobtrusive.parse($(selector));
摘要
所以我需要客户端验证来触发给定事件(除了提交)并显示相应的验证消息.我不觉得任何Markup/Razor语法是必要的,因为客户端验证会在提交时触发,并且所有相应的验证消息都会按预期显示.
我正在使用html5/Razor/MVC3来利用Twitter上的Bootstrap模板.我希望表单验证看起来像他们记录的那样(http://twitter.github.com/bootstrap/#forms).因此,如果我们看看标准锅炉板MVC3如何进行帐户注册,标记将如下所示:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class="form-stacked" })) {
@Html.ValidationSummary(true, "Snap! Something went wrong")
<div>
<fieldset>
<legend>Account Information</legend>
<div class="clearfix error">
@Html.LabelFor(m => m.UserName)
<div class="input">
@Html.TextBoxFor(m => m.UserName)
<span class="help-inline">@Html.ValidationMessageFor(m => m.UserName)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.Email)
<div class="input">
@Html.TextBoxFor(m => m.Email)
<span class="help-inline">@Html.ValidationMessageFor(m => m.Email)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.Password)
<div class="input">
@Html.PasswordFor(m => m.Password)
<span class="help-inline">@Html.ValidationMessageFor(m => m.Password)</span>
</div>
</div>
<div class="clearfix">
@Html.LabelFor(m => m.ConfirmPassword)
<div class="input">
@Html.PasswordFor(m => m.ConfirmPassword) …Run Code Online (Sandbox Code Playgroud) html5 razor unobtrusive-validation asp.net-mvc-3 twitter-bootstrap
我在互联网上关注了一些文章和教程,以便创建一个自定义验证属性,该属性也支持asp.net mvc 4网站中的客户端验证.这就是我现在所拥有的:
RequiredIfAttribute.cs
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] //Added
public class RequiredIfAttribute : ValidationAttribute, IClientValidatable
{
private readonly string condition;
private string propertyName; //Added
public RequiredIfAttribute(string condition)
{
this.condition = condition;
this.propertyName = propertyName; //Added
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
PropertyInfo propertyInfo = validationContext.ObjectType.GetProperty(this.propertyName); //Added
Delegate conditionFunction = CreateExpression(validationContext.ObjectType, _condition);
bool conditionMet = (bool)conditionFunction.DynamicInvoke(validationContext.ObjectInstance);
if (conditionMet)
{
if (value == null)
{
return new ValidationResult(FormatErrorMessage(null));
}
}
return ValidationResult.Success;
}
private Delegate CreateExpression(Type objectType, string expression) …Run Code Online (Sandbox Code Playgroud) c# jquery jquery-validate unobtrusive-validation asp.net-mvc-4