0

私は 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();
    }
}

しかし、まだチャンスはありません。

ありがとう

4

1 に答える 1

0

属性は私には問題ないようです。クライアント側でカスタム アダプタを登録する必要がありますが、これは次のようになります。

<script type="text/javascript">
    $(function () {
        jQuery.validator.unobtrusive.adapters.addBool('textref');
    });
</script>

上に表示されるもの

@Html.EditorFor(model => model.Title.Text)
@Html.ValidationMessageFor(model => model.Title.Text)
于 2011-03-29T12:52:55.683 に答える