我想创建一个内容数据能够动态扩展的任务系统(使用不同类型的输入(文本,图像,下拉菜单等)。我的计划是创建以下模型,并在某些人的帮助下自定义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字段的数据。
所以我有两个问题:
这是正确的道路吗,还是我需要以不同的方式考虑这个问题?
如果这是制作我想要的有效方法,有没有办法让构建验证工作?
答案 0 :(得分:0)
您必须使用for循环才能发布字段值以及让构建验证为您工作。
@if (Model.TaskData != null)
{
for(int i=0; i< Model.TaskData.Count; i++)
{
@Html.DisplayTextFor(model => model.TaskData[i].Name)
@Html.TextBoxFor(model => model.TaskData[i].Data)
@Html.ValidationMessageFor(model => model.TaskData[i].Data)
}
}