0

私は真っ昼間に巻き込まれているようです:

私はモデルクラスを持っています

public class Pilot
{
    //.. other prop-s escaped
    private List<FlightHoursEntry> FlightHours { get; set; }
}

public class FlightHoursEntry
{
    public string Description { get; set; }

    public int Hours { get; set; }
}

ビューは下にリストされ、すべて正しく表示されますが、ポストバックでは FlightHours プロパティが null です。エンジンがパイロットのオブジェクトを正しく初期化しないのはなぜですか?

PilotEditView で@Html.EditorFor(model => model.FlightHours)を使用しています

FlightHoursCollectionView は次のとおりです。

@model List<FlightHoursEntry>

@for (int i = 0; i < Model.Count; i++){
FlightHoursEntry fh = Model[i];
@Html.Partial("~/../FlightHoursEntryEditView.cshtml", fh);}

また、私はこの方法を試しました @Html.EditorFor(model=>model[i], "FlightHoursEntryEditView", fh)

および単純な FlightHoursEntryEditView

@model PumaMvc.Models.BusinessObjects.Copa.FlightHoursEntry

    <div class="editor-label">
        @Html.LabelFor(model => model.Hours)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Hours)
        @Html.ValidationMessageFor(model => model.Hours)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Description)
    </div>
    <div class="editor-field">      
        @Html.TextAreaFor(model => model.Description)           
        @Html.ValidationMessageFor(model => model.Description)
    </div>
4

2 に答える 2

0

フィールドはマークされていprivateます。MVC ModelBinder が着信値をバインドするには、フィールドをパブリックにする必要があると思われます。

編集 :

上記が機能しない場合:

これもチェックしてください: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx Phil は、複雑なオブジェクトのリストにモデルバインドする方法についてブログを書いています。 FlightHoursEntry クラスのエディターは、そこに表示されているように反映されます。i最終的な HTML で角括弧内の値をレンダリングするだけです。

そこにも例がありますが、投稿は少し古く、どこでも MVC2 が使用されています。

于 2011-08-19T11:16:30.480 に答える
0

次の投稿をご覧ください。これを実装する方法を理解するのに本当に役立ちました-View ModelのビューからList<E>を返します

于 2011-08-19T11:40:34.087 に答える