0
我正在處理MVC3 web應用程序,我的模型包含許多使用文本屬性的自定義類型的類。 例如我的產品實體的樣子:使用DataAnnotations或CustomValidation驗證模型的子屬性
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-」屬性。
UPDATE:
我的客戶端腳本是:
public class CategoryValidator : AbstractValidator<CategoryViewModel>
{
public CategoryValidator()
{
RuleFor(o => o.Title.Text)
.NotEmpty();
}
}
但還是沒有機會:
$.validator.addMethod("textref", function (value, element, param) {
return (value != "");
});
$.validator.unobtrusive.adapters.addBool("textref");
我也使用FluentValidation嘗試。
謝謝
謝謝,其實我已經註冊在首位的適配器。我發現如果我將EditorFor(model => model.Title.Text)更改爲TextBoxFor(model => o.model.Title),則會將「data-val-」屬性添加到輸入元素,並且客戶端驗證將進行正確,但這樣做會導致綁定問題和接收模式。標題將爲空 – sos00 2011-03-29 15:31:09
您是否設法弄清楚如何解決此問題?我面臨完全相同的問題,但是使用DateTime類型,我無法自己裝飾Date和TimeOfDay屬性。 – 2012-05-01 04:50:36