私は MVC3 webapp に取り組んでおり、モデルはテキスト プロパティのカスタム タイプを使用する多くのクラスで構成されています。たとえば、私の Product エンティティは次のようになります。
public class Product
{
public int ProductId {get;set;}
public TextRef Title {get;set;}
public TextRef Description {get;set;}
}
TextRef は次のとおりです。
public class TextRef
{
public int LangId {get;set;}
public string Text {get;set;}
}
だから私の見解では、私は使用しています:
@Html.EditorFor(model => model.Title.Text)
@Html.ValidationMessageFor(model => model.Title.Text)
DataAnnotations を使用してこれらの TextRef プロパティの検証を有効にする方法はありますか?
何も見つからなかったので、カスタムバリデーター属性を作成しました:
public class TextRefRequiredAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value is TextRef)
return !string.IsNullOrEmpty(((TextRef)value).Text);
else
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ValidationType = "textref";
yield return rule;
}
}
現在、サーバー側の検証は機能していますが、クライアント側は機能していません。実際、「data-val-」属性は入力に対して生成されませんでした。
アップデート:
私のクライアントスクリプトは次のとおりです。
$.validator.addMethod("textref", function (value, element, param) {
return (value != "");
});
$.validator.unobtrusive.adapters.addBool("textref");
FluentValidation も使用してみました:
public class CategoryValidator : AbstractValidator<CategoryViewModel>
{
public CategoryValidator()
{
RuleFor(o => o.Title.Text)
.NotEmpty();
}
}
しかし、まだチャンスはありません。
ありがとう