我是一名很长时间的后端.Net开发人员,他是Web应用程序开发的新手。我正在使用MVC 4,Razor,EF 5,我对如何使用这些工具制作一个例程DB驱动的MVC 4站点有基本的了解。
我需要为工作流场景创建自定义表单功能。我有完整的代码优先架构和不同的formfield类型的类,以及formvalue类型。
将传递给视图的模型将是一个带有formvalue列表的表单类,其中包含表单字段规范。因此,视图必须遍历表单字段并动态选择要使用的编辑器等等。
我的问题是,这使我无法使用任何数据注释进行客户端验证。我发现自定义验证建议的每个地方(毫不奇怪)假设所有字段都是类的成员。然而,在这种情况下,所有字段都在列表中。
我的目标是最终得到每个字段的验证消息和验证摘要,就像视图只是绑定到带注释的类一样。
有关如何处理此问题的任何建议?提前谢谢。
想象一下具有以下内容的视图逻辑:
@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.
}
并且fieldvalue类看起来像这样:
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对象中的字段。
对不起,如果我浪费了任何人的时间。但我会把这个留给像我这样的其他新手。