1

我想创建一个内容数据能够动态扩展的任务系统(使用不同类型的输入(文本、图像、下拉菜单等)。我的计划是创建以下模型,并在一些自定义 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 字段的任何数据。

所以我有两个问题:

  1. 这是正确的道路,还是我需要以不同的方式考虑这一点?

  2. 如果这是制作我想要的东西的有效方法,有没有办法让内置验证工作?

4

1 回答 1

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)
        }
    }
于 2013-03-21T18:57:55.577 回答