我使用的是asp.net mvc 3 jQuery不显眼的验证。我最近从标准DataAnnotations更改为FluentValidation,它工作得很好。嵌套(集合)属性mvc clientside验证
我选择FluentValidation的主要原因是需要验证我的viewmodel的嵌套属性(但我发现还有其他很酷的使用它的理由),看起来像这样(不介意这是伪参数):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
使用FluentValidation我做一个验证的虚拟机和ElementVm和我的单元测试是绿色的,我展示服务器端验证工作。客户端,'Prop'和'AnotherProp'正在工作 - 我的验证规则也像预期的那样运行在客户端(与DataAnnontation一样),但是我的所有元素都没有得到任何客户端验证 - 我检查了DOM,并可以看到所有的数据val,数据需求等属性丢失。
我已经尝试了不同的方法来在我的视图中生成html,但'Prop'和'AnotherProp'是使用Html.TextBoxFor(m => m.Prop)生成的,而我的元素是在部分生成的 - 这是问题开始的地方。如果我选择Html.TextBoxFor(m => m.Value),所有我的元素文本框将具有相同的名称/ ID,因此我也尝试使用Html.TextBox(Model.Id)生成唯一的ID /名称,但仍然没有验证属性。
所以,有没有办法让我的参议员工作 - 我不介意重写一下,但我真的很喜欢FluentValidation为我写我的HTML。
我的备用解决方案是让我自己的Html帮助器生成带有属性的正确Html,但这会吸引我认为,因为当新版本/补丁发布到FluentValidation时,我将不得不更新这些帮助器, jQuery的验证或两者之间的MVC链接。
谢谢!这是有效的,应该被标记为答案。 – JustinP8 2011-04-22 17:25:18
此外,如果循环后有输入,请不要忘记重置'ViewData.TemplateInfo.HtmlFieldPrefix =“''。 – JustinP8 2011-04-22 17:39:27
@ JustinP8,@counsellorben,@Per:我有同样的问题,但是这并没有解决它。我为我的嵌套集合使用EditorTemplates,并且所有'input'标签的'id'属性都已经用适当的/等价的“Elements [0]”作为前缀。 'ViewData.TemplateInfo.HtmlFieldPrefix'很方便知道,但对我来说不是问题。 @Per提到'data-val,data-required等属性缺失'。我注意到了同样的事情。 – tkerwood 2011-06-09 07:52:33