我想创建一个内容数据能够动态扩展的任务系统(使用不同类型的输入(文本、图像、下拉菜单等)。我的计划是创建以下模型,并在一些自定义 HtmlHelpers 的帮助下生成我的观点。
模型:
public class Task
{
public int TaskId { get; set; }
public string Name { get; set; }
public virtual List<TaskData> TaskData { get; set; }
}
public enum TaskDataType
{
TextType1, TextType2, E-mail, Image
}
public class TaskData
{
public int TaskDataId { get; set; }
public int TaskId { get; set; }
public TaskDataType Type { get; set; }
public string Name { get; set; }
[Required]
public string Data { get; set; }
public bool Required { get; set; }
public virtual Task Task { get; set; }
}
看法:
任务的验证,使用默认的 HtmlHelpers 开箱即用,但是当我尝试做类似的事情时:
@if (Model.TaskData != null)
{
foreach (var taskData in Model.TaskData)
{
@Html.DisplayTextFor(td => taskData.Name)
@Html.TextBoxFor(td => taskData.Data)
@Html.ValidationMessageFor(td => taskData.Data)
}
}
在我看来,验证开始出错,客户端站点验证仅验证 forech 循环中的第一个输入,并且控制器中的 ModelState 不包含有关 TaskData 字段的任何数据。
所以我有两个问题:
这是正确的道路,还是我需要以不同的方式考虑这一点?
如果这是制作我想要的东西的有效方法,有没有办法让内置验证工作?