我是一名长期从事 Web 应用程序开发的后端 .Net 开发人员。我正在使用 MVC 4、Razor、EF 5,并且我对如何使用这些工具制作常规的 DB 驱动的 MVC 4 站点有基本的了解。
我需要为工作流场景创建自定义表单功能。我为不同的表单字段类型和表单值类型设计了整个代码优先模式和类。
将传递给视图的模型将是一个带有表单值列表的表单类,其中包含表单字段规范。因此视图必须遍历表单字段并动态选择要使用的编辑器等等。
我的问题是这使我无法使用任何数据注释进行客户端验证。我在自定义验证方面找到建议的每个地方都假设(毫不奇怪)所有字段都是类的成员。而在这种情况下,所有字段都在列表中。
我的目标是最终得到每个字段上的验证消息和一个验证摘要,就像您通常将视图绑定到一个带注释的类一样。
关于如何解决这个问题的任何建议?提前致谢。
想象一下具有以下内容的视图逻辑:
@foreach (var fieldvalue in Model.FormFieldValues) {
// Logic that chooses the appropriate editor based on typeof(fieldvalue.FormField)
// Binds the editor to fieldvalue.Value
// Validation specs are contained in the Formfield obtained by fieldValue.FormField
// And my problem is setting up the validation without the aid of the normal method
// of data annotation or class level custom validation.
}
字段值类如下所示:
public class FormFieldValue : EboEntity
{
public string Value { get; set; }
[Required]
public int FormFieldId { get; set; }
[Required]
public virtual FormField FormField { get; set; }
[Required]
public int FormId { get; set; }
[Required]
public virtual Form Form { get; set; }
}
并假设 FormField 对象具有诸如Required、Maxlength 等字段,具体取决于它的字段类型(即 FormFieldText 将是 FormField 的子类)
回答:
好的,你可以说我是 MVC 的新手。
我的问题的答案是特定的编辑器采用可以控制验证的 htmlAttributes。因此,如果我的表单字段之一是 stringlenth(10) 的必需文本字段,我可以按如下方式调用编辑器:
<div class="editor-field">
@Html.TextBoxFor(model => model.NoTexty, new {
required = true,
maxlength = 10,
placeholder = "Texty"})
@Html.ValidationMessageFor(model => model.NoTexty)
</div>
但在我的情况下,htmlAddtributes 不会被硬编码,而是来自 formvalue.FormField 对象中的字段。
对不起,如果我在这上面浪费了任何人的时间。但我会把这个留给像我这样的其他新手。