是否可以在ASP.NET MVC中使用通用的远程验证检查?

时间:2016-03-22 05:19:43

标签: asp.net asp.net-mvc

要进行远程验证,请在视图模型中执行以下操作:

public class ViewModelOne {
   [Required]
   [Remote("CheckStringIsRed", "RemoteValidationController", ErrorMessage = "It's not red.")]
   public string BgColour { get; set; }
}

然后在某个控制器中执行操作:

public JsonResult CheckStringIsRed(string BgColour) {
    return Json(BgColour == "Red");
}

但是我想在其他地方执行相同的验证:

public class ViewModelOne {
    [Required]
    [Remote("CheckStringIsRed", "RemoteValidationController", ErrorMessage = "It's not red.")]
    public string SomeColour { get; set; }
}

注意属性名称现在是 SomeColour ,这意味着对原始CheckStringIsRed()的调用将失败。那么考虑到参数名称不同,有没有办法重用CheckStringIsRed()?我只想编写一次验证并在may属性上使用它。

1 个答案:

答案 0 :(得分:1)

不,不可能。 RemoteAtribute生成ModelClientValidationRuleHtmlHelper用于添加data-val-*属性,jquery.validate.unobtrusive.js依次读取这些属性以向jquery添加规则验证者根据财产的名称。

您可以选择

  • 在各种视图模型中使用相同的属性名称或
  • 删除该属性并使您拥有ajax调用。例如
@Html.TextBoxFor(m => m.somePropertyName, new { @class = "validatecolor" })
<span class="field-validation-error" style="display:none">It's not red.</span>

var url = '@Url.Action("CheckStringIsRed", "yourController")';
$.('.validatecolor').blur(function() {
    $.getJson(url, { color: $(this).val() }, function(result) {
        if(!result) {
            $(this).next('span').show(); // choose a better relative selector :)
        });
    });
});

并将控制器方法参数更改为string color