ASP.NET MVC 4 アプリケーションを使用しており、ビュー モデルのいくつかのプロパティを目立たないように検証したいと考えています。簡略化されたバージョンは次のとおりです。
ビューモデル:
[AtLeastOne(new[] {"FirstName", "LastName"})]
public class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
検証属性:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class AtLeastOneAttribute : ValidationAttribute, IClientValidatable
{
private readonly string[] _propertyNames;
public AtLeastOneAttribute(string[] propertyNames)
{
if (propertyNames == null) throw new ArgumentNullException("propertyNames");
if (propertyNames.Length < 2) throw new ArgumentOutOfRangeException("propertyNames");
_propertyNames = propertyNames;
}
public override bool IsValid(object value)
{
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var modelClientValidationRule = new ModelClientValidationRule
{
ErrorMessage = "AAAAA!!!",
ValidationType = "atleastone",
};
modelClientValidationRule.ValidationParameters.Add(new KeyValuePair<string, object>("propertynames", _propertyNames));
return new[]
{
modelClientValidationRule
};
}
}
私は持っていますが:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Web.config および
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
jQuery.validator.unobtrusive.adapters.add("atleastone", ['FirstName', 'LastName'], function (options) {
alert('options!');
});
</script>
私のビューに設定すると、この検証では何もレンダリングされません。たとえば、FirstName または LastName に [Required] を追加すると、data-* 検証属性が追加されます。
この複数プロパティのカスタム クライアント側検証を実現するにはどうすればよいですか?
ソリューション全体を表示/ダウンロードしたいですか?