Tôi đang sử dụng Visual Studio 2012 và tôi không thể có được một thuộc tính tùy chỉnh phía khách hàng thuộc tính để làm việc để tái tạo ở quy mô nhỏ hơn, tôi đã tạo một dự án MVC 4 mới. mô hình và thuộc tính đó sẽ không bao giờ xác nhậnASP.NET MVC 4 - Xác nhận Clientside không hoạt động
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"
};
}
}
sau đó tôi có những hành động sau đây bổ sung vào HomeController
public ActionResult Index()
{
return View(new MyModel());
}
[HttpPost]
public ActionResult Index(MyModel model)
{
if (!ModelState.IsValid)
{
// Will Always Be Invalid
}
return View(model);
}
Ngoài ra còn có một file javascript gọi nevervalid.js
$(function() {
$.validator.addMethod("nevervalid", function() {
return false;
}, "Clientside Should Not Postback");
$.validator.unobtrusive.adapters.addBool("nevervalid");
});
và Index Xem
@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")
}
Các lĩnh vực có liên quan trong web.config của tôi trông như thế này
<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>
khi tải trang, các tập tin sau đây được nạp (nhận này từ tab mạng dưới chrome's 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
và thuộc tính tùy chỉnh của tôi thêm có liên quan tìm đĩa dữ liệu công cụ để tên đầu vào đầu tiên như vậy ...
<input class="text-box single-line valid" data-val="true" data-val-nevervalid="Serverside Will Never Validate" id="FirstName" name="FirstName" type="text" value="">
vậy, tôi hỏi bạn, tại sao oh tại sao điều này phải postback để làm xác nhận serverside trong khi tôi có một số hoàn hảo tìm mã javascript ở đây? Tôi có phải hy sinh một số động vật vào một đêm không trăng trên đỉnh đồi ở đâu đó không?
Liệu sự giúp đỡ này, có vẻ như bạn đang không trọng tất cả các chức năng cần thiết trong thuộc tính xác nhận của bạn. http://stackoverflow.com/questions/8284207/asp-net-mvc-implement-custom-validator-use-iclientvalidatable –
Xin chào, Patrick, cảm ơn đã dành thời gian của bạn để xem xét vấn đề, Trong sự vội vã của tôi để có được mã tái tạo nhỏ nhất, tôi bỏ qua lần ghi đè IsValid thứ hai ... nó vẫn không hoạt động ... Tôi nghĩ tôi phải trải qua tất cả các câu hỏi SO liên quan. nhưng không có gì ... Tôi hy vọng rằng ai đó có thể tái tạo nó vào cuối thế giới của họ, xác nhận tôi aint sẽ điên rồ ... – G2Mula