相关疑难解决方法(0)

ASP.NET MVC 3带参数的客户端验证

继本文后,对自定义属性执行客户端验证

我试图了解如何执行此操作,将其他参数传递给客户端脚本

据我所知,到目前为止,使用MVC 3实现自定义验证需要以下内容

创建自定义验证属性

基于ValidationAttribute并实现IClientValidatable.我还看到了一些源自ModelValidator的示例,它似乎实现了ValidationAttribute和IClientValidatable的功能.所以这是关于差异是什么或者ModelValidator是否在MVC 2中使用但现在已被弃用或者是什么的第一个混淆点?

必须从GetClientValidationRules()返回ModelClientValidationRule的实例以指定详细信息,例如错误消息,ValidationType(我理解为将执行客户端验证的Javascript函数的名称)以及属性的任何其他自定义参数可能有,并且需要传递给Javascript验证.

我假设运行时(不确定它的哪一部分)然后使用ModelClientValidationRule标签元素生成html属性,如下所示:

data-val="true"  (to indicate that the element requires validation)
data-val-[ValidationType]=[ErrorMessage]
data-val-[ValidationType].[ValidationParameters(n).Key]=[ValidationParameters(n).Value]
Run Code Online (Sandbox Code Playgroud)

实现客户端验证逻辑

必须使用jQuery.validators.addmethod()创建Javascript函数并将其添加到jQuery.validators,以便JQuery在需要执行时知道它.就像是:

jQuery.validator.addMethod(
    'greaterThan', 
    function (value, element, params) {
        /.../
       return /* true or false   */ ; 
    },
    ''
); 
Run Code Online (Sandbox Code Playgroud)

我的问题是签名'function(value,element,params)'是否是处理验证的方法的标准,我认为它将在适当的时候被某些jQuery功能调用,例如在提交表单之前或者element会丢失fuces或keyUp事件.我只是不知道如何控制这个,即选择适合自定义验证的事件.

实现一个不显眼的适配器

这将不显眼的属性转换为; 我不太清楚,但认为它是一个jQuery规则,但我不清楚这些是如何工作的.就像是

jQuery.validator.unobtrusive.adapters.add(
    'futuredate', 
    { },
    function (options) {
        options.rules['greaterThan'] = true;
        options.messages['greaterThan'] = options.message;
    }
); 
Run Code Online (Sandbox Code Playgroud)

我的问题是'功能(选项)'.这是在'function(value,element,params)'之前调用的函数,负责将不显眼的标记提取到jQuery.Validation可以理解的数据结构中.从代码示例中我可以看出,options是一个对象,它包含来自标记的属性值(例如options.message)和它必须映射到的jQuery相关属性(例如options.messages ['ClientSideValidationFunctionName']如果是这样,如何检索和映射自定义参数.

我希望我没有添加任何额外的困惑.

validation parameters asp.net-mvc client-side asp.net-mvc-3

54
推荐指数
1
解决办法
3万
查看次数

MVC3中的IValidatableObject - 客户端验证

使用MVC3,您可以使用两种新的机制来添加自定义验证.这些是(1)子类ValidationAttribute或(2)实现IValidatableObject.

ValidationAttribute允许您通过实现IClientValidatable(并通过jQuery注册新的适配器和方法)相对简单地添加客户端验证.

IValidatableObject更适合于一次性验证要求,其中重用不是一种选择.它还导致更简单的代码.因此,它是我选择的一些场景.不幸的是,我没有看到使用此方法实现客户端验证的简单方法.

所以问题是我缺少什么以及在使用IValidatableObject时如何获得JS验证?

validation client-side-validation asp.net-mvc-3

33
推荐指数
1
解决办法
9441
查看次数

DataAnnotations如何在MVC中真正起作用?

这更像是一个理论问题.

我目前正在使用ComponentModel.DataAnnotations检查MVC 3验证,一切都在自动运行,特别是在客户端.

某种程度上会检查这些属性,并为验证生成javascript(或html5属性,如果使用不显眼的模式),它可以工作.

我的问题是什么生成客户端javascript以及如何访问和修改它?例如,我想稍微处理给定的dataannotation属性,或处理自定义属性(我发现我可以从ValidationAttribute派生它们,但可能由于某些原因我不想要).

有人可以向我解释一下真正发生了什么吗?(或者链接到好的解释也会很好,因为我只找到了实际使用数据注释的教程)

编辑:此外,从ValidationAttribute派生,客户端验证不会自动运行.为什么?

c# data-annotations asp.net-mvc-3

13
推荐指数
1
解决办法
6819
查看次数

ASP.NET MVC实现自定义验证器使用IClientValidatable

在这里问类似的问题,但是在这个问题中我使用了另一个实现,正是这种方式下面的代码显示了我的实现:

模型:

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

11
推荐指数
1
解决办法
1万
查看次数

如何在客户端将自定义ValidationAttribute呈现为"da​​ta-val-xx"属性?

给定一个如下所示的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实现这一目标?

例如,我是否需要在自定义验证器上添加一些特殊属性?或者在某处注册?

validationattribute unobtrusive-validation asp.net-mvc-3

7
推荐指数
1
解决办法
6707
查看次数

ASP.NET MVC3:ValidationType ModelClientValidationRule

我刚刚创建了一个示例MVC3应用程序来学习验证.它正在使用DataAnnotations.我创建了一个名为CustomStartLetterMatch 的自定义ValidationAttribute.它正在实现"System.Web.Mvc.IClientValidatable".我有相应的客户端代码用不引人注目的jQuery编写.这是按预期工作的.

关于自定义验证器:它比较第一个名称输入和姓氏输入.如果它们的第一个字符不相同则抛出错误.

正如我所说,该应用程序工作正常.但是当我看着rule.ValidationType = "greaterdate";我感到困惑时.我想将其更改为"anotherDefaultType"之类的其他内容.当我更改它时,它失败并出现jQuery错误.

  1. 这是什么原因?
  2. 有哪些可用的ValidationTypes?
  3. 在此场景中更改ValidationType的建议方法是什么?

码:

using System;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
namespace MyValidationTEST
{
    public class Person
    {
    [Required(ErrorMessage = "First name required")]
    public string FirstName { get; set; }

    [CustomStartLetterMatch("FirstName")]
    [StringLength(5,ErrorMessage = "Must be under 5 characters")]
    public string LastName { get; set; }

    [Range(18,50,ErrorMessage="Must be between 18 and 50")]
    public int Age { get; set; }

}



public sealed class CustomStartLetterMatch : ValidationAttribute, System.Web.Mvc.IClientValidatable 
{

    private const string _defaultErrorMessage …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc jquery componentmodel asp.net-mvc-3

5
推荐指数
1
解决办法
6052
查看次数