我正在使用带有 jquery 不显眼验证的 asp.net mvc 3。我最近从标准 DataAnnotations 更改为 FluentValidation 并且效果很好。
我选择 FluentValidation 的主要原因是需要验证我的视图模型上的嵌套属性(但我发现使用它还有其他很酷的原因),有点像这样(不要介意访问器,这是伪的):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
使用 FluentValidation 我为 Vm 和 ElementVm 制作了一个验证器,我的单元测试是绿色的,表明服务器端验证正在工作。
客户端,“Prop”和“AnotherProp”正在工作-我的验证规则也按预期在客户端运行(就像使用 DataAnnontation 一样),但是我所有的元素根本没有得到任何客户端验证-我检查了dom 并且可以看到所有 data-val、data-required 等属性都丢失了。
我尝试了不同的方法来在我的视图中生成 html,但是“Prop”和“AnotherProp”是使用 Html.TextBoxFor(m => m.Prop) 生成的,而我的元素是部分生成的——这就是问题开始。如果我选择 Html.TextBoxFor(m => m.Value) 我所有的元素文本框都将具有相同的名称/id,所以我也尝试使用 Html.TextBox(Model.Id) 生成唯一的 id/名称,但仍然没有验证属性.
那么有没有办法让我的 senario 工作 - 我不介意重写它,但我真的希望 FluentValidation 为我编写我的 html。
我的后备解决方案是让我自己的 Html 助手生成带有属性的正确 Html,但我认为这很糟糕,因为当对 FluentValidation、jquery 验证或两者之间的mvc链接。