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 フィールドに関するデータが含まれていません。

だから私は2つの質問があります:

  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 に答える