1

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クラスには、ユーザーが多くのEventRangeを追加できる数のEventRangeのリストが含まれています。

イベントと呼ばれるビューを作成しました。これは、偶数範囲の部分ビューを動的に追加します。たとえば、ユーザーは、5つのイベント範囲を保存したい場合は、[イベント範囲の追加]ボタンを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)

ただし、イベントビューをロードしても、部分ビューの要素、イベント作業の名前と説明のラベルとテキストボックスはロードされません。ただし、eventrangeの部分ビューには何も表示されません。

誰かが私が間違っていることを誰かが知っていますか?また、これがフォームを投稿するためにコレクションをバインドする正しい方法であるかどうか、誰かが何か提案がありますか?

4

2 に答える 2

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])
}
于 2012-11-16T18:45:11.993 に答える
0

「EventRange.cshtml」を「〜/ Views / Shared/EditorTemplates/」フォルダに配置してみてください。

于 2012-11-16T16:48:13.563 に答える