C# 自定义数据注释、客户端验证、视图模型和模型状态
这是本帖一个老问题的延伸: 这让我对如何使用jquery-unubtrusive-ajax.js进行客户端自定义验证有了很多了解 以下是答案代码:C# 自定义数据注释、客户端验证、视图模型和模型状态,c#,asp.net-mvc,asp.net-mvc-3,data-annotations,modelstate,C#,Asp.net Mvc,Asp.net Mvc 3,Data Annotations,Modelstate,这是本帖一个老问题的延伸: 这让我对如何使用jquery-unubtrusive-ajax.js进行客户端自定义验证有了很多了解 以下是答案代码: namespace Checked.Entitites { public class BooleanRequiredAttribute : ValidationAttribute, IClientValidatable {
namespace Checked.Entitites
{
public class BooleanRequiredAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return value != null && (bool)value == true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
//return new ModelClientValidationRule[] { new ModelClientValidationRule() { ValidationType = "booleanrequired", ErrorMessage = this.ErrorMessage } };
yield return new ModelClientValidationRule()
{
ValidationType = "booleanrequired",
ErrorMessage = this.ErrorMessageString
};
}
}
}
在视图中使用textboxfor时,错误消息将填充在html验证摘要中
@Html.CheckBoxFor(model => model.Terms, new { @class = "legalbox", @placeholder = "Terms" })
我还必须将这一行添加到jquery.unubtrusive-ajax.js中
$.validator.unobtrusive.adapters.addBool("BooleanRequired", "required");
当我在控制器中引用此模型并检查modelstate时,就会出现此修复程序的问题。无论此自定义验证字段的值是多少,modelstate始终为false。看起来覆盖isvalid在客户端验证中有效,但在服务器端无效。我需要它来处理这两个问题,并且一直在努力寻找一个解决方案,而不是放弃数据注释而使用其他东西
我在控制器中使用的特定行永远不会与此字段一起通过,如下所示:
if (ModelState.IsValid) {
//Logic here
}
使用标准数据注释的模型的其余部分正确地进行了验证,我只是无法让这个自定义注释以与内置属性相同的方式工作。正确的解决方案可能会使我不必将这一行添加到不引人注目的ajax文件中
任何帮助都将不胜感激
谢谢
if (ModelState.IsValid) {
//Logic here
}