gpt4 book ai didi

unobtrusive-validation - 嵌套(集合)属性的 mvc 客户端验证

转载 作者:行者123 更新时间:2023-12-04 08:41:28 24 4
gpt4 key购买 nike

我正在使用带有 jquery 不显眼验证的 asp.net mvc 3。我最近从标准 DataAnnotations 更改为 FluentValidation 并且效果很好。

我选择 FluentValidation 的主要原因是需要验证我的 View 模型上的嵌套属性(但我发现使用它还有其他很酷的原因),有点像这样(不要介意访问器,这是伪的):

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 等属性都丢失了。

我尝试了不同的方法在我的 View 中生成 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链接。

最佳答案

在您的部分中,在 ElementsVM 的每个实例之前,您必须使用 ViewData.TemplateInfo.HtmlFieldPrefix 设置一个唯一的前缀,如下所示:

var i = 0; 
foreach (var element in Model)
{
ViewData.TemplateInfo.HtmlFieldPrefix = "Elements[" + i.ToString() + "]";
@Html.TextBoxFor(m => m.Value)
i++;
}

这应该为您提供不显眼的验证属性,并且还应该与默认模型绑定(bind)器一起使用。

辅导员本

关于unobtrusive-validation - 嵌套(集合)属性的 mvc 客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com