MVC编辑器不适合收集

时间:2012-11-16 16:42:40

标签: c# asp.net-mvc editorfor

我有一个名为Events的模型类和一个名为EventRange的模型类:

public class Event
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public List<EventRange> RangesCollection { get; set; }
}

public class EventRange
{
    public int Id { get; set; }

    public string RangeName { get; set; }
    public string RangeDescription { get; set; }
    public int Capacitiy { get; set; }
}

正如您所看到的,Event类包含一个EventRanges的List,因为用户应该能够添加很多EventRanges。

我创建了一个名为events的视图,它动态地为evenrange附加一个局部视图。例如,如果用户希望保存5个EventRanges,则可以按下Add Event Range按钮5次。

活动视图:

@using (Ajax.BeginForm("CreateEvent", "Events", new AjaxOptions { HttpMethod = "POST" }, new { @class = "mainForm" }))
{
    @*Event data:*@
    @Html.LabelFor(m => m.Name)@Html.TextBoxFor(m => m.Name)
    @Html.LabelFor(m => m.Description)@Html.TextBoxFor(m => m.Description)

    @*EventRange data:*@

    <div id="EventRangediv">
    @Html.EditorFor(m => m.RangesCollection)
    </div>

}

事件范围的部分视图保存在“〜/ views / events / EditorTemplates / EventRange.cshtml”下

EventRange.cshtml:

@model fanaticksMain.Models.EventRange

@Html.HiddenFor(m => m.Id)
@Html.DisplayFor(m => m.RangeName)
@Html.LabelFor(m => m.RangeName)@Html.TextBoxFor(m => m.RangeName)
@Html.LabelFor(m => m.RangeDescription)@Html.TextBoxFor(m => m.RangeDescription)

但是,加载事件视图不会加载部分视图中的任何元素,事件的名称和描述的标签和文本框。但事件范围部分视图没有显示任何内容。

任何人都有人知道我做错了什么?另外,如果这是绑定集合以发布表单的正确方法,是否有人有任何建议?

2 个答案:

答案 0 :(得分:2)

EventRange.cshtml将模型指定为EventRange。 m.RangesCollection是EventRange对象的集合。

我没有看到定义为接受EventRange集合的模型。

尝试在代码中放置一个for循环来迭代每个EventRange并显示每个EventRange.cshtml编辑器:

而不是:

@Html.EditorFor(m => m.RangesCollection)

尝试:

@for (int i = 0; i < m.RangeCollection.Count; i++)
{
    @Html.EditorFor(m => m.RangeCollection[i])
}

答案 1 :(得分:0)

尝试将“EventRange.cshtml”放在“〜/ Views / Shared / EditorTemplates /”文件夹中。