G2M*_*ula 10 asp.net jquery jquery-validate unobtrusive-validation asp.net-mvc-4
我正在使用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 = this.ErrorMessage,
ValidationType = "nevervalid"
};
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将以下操作添加到HomeController中
public ActionResult Index()
{
return View(new MyModel());
}
[HttpPost]
public ActionResult Index(MyModel model)
{
if (!ModelState.IsValid)
{
// Will Always Be Invalid
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
还有一个名为nevervalid.js的javascript文件
$(function () {
$.validator.addMethod("nevervalid", function () {
return false;
}, "Clientside Should Not Postback");
$.validator.unobtrusive.adapters.addBool("nevervalid");
});
Run Code Online (Sandbox Code Playgroud)
和索引视图
@model CustomAttribute.Models.MyModel
@{
ViewBag.Title = "Home Page";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>MyModel</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/Scripts/nevervalid.js")
}
Run Code Online (Sandbox Code Playgroud)
我的web.config中的相关区域如下所示
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
当页面加载时,加载以下文件(从chrome的F12下的网络选项卡获取)
http://localhost:7440/
http://localhost:7440/Content/site.css
http://localhost:7440/Scripts/modernizr-2.5.3.js
http://localhost:7440/Scripts/jquery-1.7.1.js
http://localhost:7440/Scripts/jquery.unobtrusive-ajax.js
http://localhost:7440/Scripts/jquery.validate.js
http://localhost:7440/Scripts/jquery.validate.unobtrusive.js
http://localhost:7440/Scripts/nevervalid.js
Run Code Online (Sandbox Code Playgroud)
我的自定义属性将相关的查找数据添加到第一个名称输入中,如此...
<input class="text-box single-line valid" data-val="true" data-val-nevervalid="Serverside Will Never Validate" id="FirstName" name="FirstName" type="text" value="">
Run Code Online (Sandbox Code Playgroud)
所以,我问你,为什么哦为什么这个东西必须回发做服务器端验证,而我在这里有一些完美的javascript代码?在某个山顶上的一个没有月亮的夜晚,我是否必须牺牲一些动物?
Cha*_*ino 18
我想知道如果你改变了nevervalid.js会发生什么,以便代码在文档准备好之前执行.
我的基本思想是,当dom准备就绪时,通过解析文档来进行不显眼的验证...但如果你在同一时间/之后加载自定义验证内容,它就不会知道当它到来时该做什么您自定义验证数据属性.
无论如何,尝试将nevervalid.js改为简单地:
(function($) {
$.validator.addMethod("nevervalid", function () {
return false;
}, "Clientside Should Not Postback");
$.validator.unobtrusive.adapters.addBool("nevervalid");
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12099 次 |
| 最近记录: |