相关疑难解决方法(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万
查看次数

ASP.NET MVC3 - DateTime格式

我正在使用ASP.NET MVC 3.
我的ViewModel看起来像这样:

public class Foo
{
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
    public DateTime StartDate { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在视图中,我有这样的事情:

<div class="editor-field">
    @Html.EditorFor(model => model.StartDate)
    <br />
    @Html.ValidationMessageFor(model => model.StartDate)
</div>
Run Code Online (Sandbox Code Playgroud)

StartDate以正确的格式显示,但当我将其值更改为19.11.2011并提交表单时,我收到以下错误消息:"值'19 .11.2011'对StartDate无效."

任何帮助将不胜感激!

datetime asp.net-mvc-3

28
推荐指数
2
解决办法
3万
查看次数

MVC3不引人注目的验证在IE中不起作用

我有MVC3应用程序,不引人注目的验证在FireFox中工作正常,但在IE中不起作用.

有什么想法吗?

UPDATE

似乎MVC3附带的jQuery不显眼验证库与我正在使用的jQuery 1.7.1(与引导模板一起提供)不完全兼容.在Firefox中工作,不适用于IE 8(我拥有的).

我开始将jQuery升级到它开始工作的版本(不确定是否其他东西不会破坏!).

当我达到1.8.1时,它终于奏效了.

我继续升级jQuery,当我到达1.9.1时 - 该死的东西再次停止工作:)

使用MVC3 jQuery不显眼验证的最新jQuery版本是1.8.3.

看起来这也是最新的jQuery版本,与MVC3 jQuery unobtrusive ajax库配合使用.

PS人们使用MVC3不引人注意的验证或ajax,不要使用高于v 1.8.3的jQuery.

unobtrusive-validation asp.net-mvc-3

8
推荐指数
2
解决办法
6816
查看次数

Asp.net MVC设置验证日期格式在Chrome上失败

我在asp.net mvc中设置验证日期格式Chrome时遇到问题,对于IE等其他浏览器,Firefox工作正常.

我在我的模型中定义了日期,如下一个代码:

[Required]
[Display(Name = "Data fi publicació")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime PublishingEndDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我看来:

@Html.TextBoxFor(model => model.PublishingEndDate)
@Html.ValidationMessageFor(model => model.PublishingEndDate)
Run Code Online (Sandbox Code Playgroud)

问题看来,@Html.ValidationMessageFor用格式验证日期MM/dd/yyyy,但我想要的是用欧洲格式验证dd/MM/yyyy.如何将默认文化验证格式日期更改为dd/MM/yyyy

谢谢你的帮助

asp.net-mvc

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