1

MVC で作業する FormModel があります。

public class FormModel
{  
    public string Description { get; set; }
    public List<CustomList> CustomList { get; set; }

    public FormModel(){}
} 

FormModel クラスは、クラス CustomList のリストで構成されます。

public class CustomList
{
    public int CustomListId { get; set; }
    public string Description { get; set; }
    public List<String> StringList{ get; set; }

public CustomerList(){}
}

文字列のリストが含まれています。私が達成したいのは、ユーザーが StringList の各値を編集できるようにするフォームを設定することです。そのために、ビューを設定しました。

@model CMS.Models.FormModel
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using(Html.BeginForm("DoStuff", "Create", Model))
{
    <div>
        <p>Description: @(Html.EditorFor(e => e.Description))</p>

        @for (int i = 0; i < Model.CustomList.Count; i++)
        {
            @Html.LabelFor(l => l.CustomList[i].Description)
            @Html.HiddenFor(h => h.CustomList[i].CustomListId)
            for (int a = 0; a < Model.CustomList[i].StringList.Count; a++)
            {
                @Html.EditorFor(e => e.CustomList[i].StringList[a])                                        
            }
        }
        <input type="submit" />
    <div>
}

送信時に、FormModel の説明がコントローラーに返されますが、CustomList は空に返されます。Joe Stevens からのリンクをいくつか確認しましたが、何かが足りないようです。どんな助けでも大歓迎です。

4

2 に答える 2

1

それ以外の:

@using(Html.BeginForm("DoStuff", "Create", Model))

試す:

 @using(Html.BeginForm("DoStuff", "Create", FormMethod.Post))

これがうまくいくことを願っています!

@Mystere Manコンストラクターでリストをインスタンス化することが問題だったとは思いません。それがモデルバインディングの問題であることは聞いたことも経験したこともありませんが、とにかくリストでは常に良い習慣です.

于 2012-10-05T20:46:42.120 に答える
0

両方のモデルのコンストラクターで空のリストをインスタンス化する必要があります。デフォルトのモデルバインダーは、空のリストを作成しません。リストオブジェクトがないため、値をバインドしません。

それ以外は正しいように見えます。

于 2012-10-05T14:28:15.663 に答える