要进行远程验证,请在视图模型中执行以下操作:
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属性上使用它。
答案 0 :(得分:1)
不,不可能。 RemoteAtribute
生成ModelClientValidationRule
,HtmlHelper
用于添加data-val-*
属性,jquery.validate.unobtrusive.js
依次读取这些属性以向jquery添加规则验证者根据财产的名称。
您可以选择
@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