0

リスト プロパティを持つモデルをビューからポスト アクションに渡そうとしています。リストは投稿時に null に戻りますが、情報を更新するには新しいアイテムを含むリストが必要です。私のモデルは次のようになります。

    public class Person()
    {
    internal string Name {get;set;}
    internal decimal Age {get;set;}
    internal List<int> Rate {get;set;}
    }

ビューには現在の情報が取り込まれ、foreach を使用してリストを反復処理し、編集機能用のテキスト ボックスを生成します。目的の値を編集した後に送信を押すと、ビューは [HttpPost] アクションに移動しますが、値は null です。

ビューは @using (Html.BeginForm(Model)) で囲まれ、送信時にモデルがポスト アクションに渡されますが、リストは null です。他のすべての値が入力されます。

何か案は?PS 私たちは c# と Razor View Engine を使用しています。申し訳ありませんが、リストがまだモデルに渡されていません。ここでは 4 ループです。

     @{ int i = 0;}
        <table>
        @for (i = 0; i < Model.VendorContracts.Count; i++ )
        {

            if (i == 0)
            {
                    <tr>
                        <th>
                            Vendor Contracts
                        </th>
                        <th>
                        Effective Date
                        </th>
                    </tr>

            }
            if (i < 5)
            {
                <tr>
                    <td>@Model.VendorContracts[i]
                    </td>

                    <td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
                </tr>
            }
            if (i == 5 || i == 10 || i == 15 || i == 20)
            {
                @:</table>
                @:<table>
                }
            if (i >= 5)
            {
                if (i == 5 || i == 10 || i == 15 || i == 20)
                {
                <tr>
                <th>Vendor Contracts
                </th>
                <th>
                Effective Date
                </th>
                </tr>
                }
            <tr>
            <td>
            @Model.VendorContracts[i]
            </td>
            <td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
            </tr>
            }
        } 
        </table>
4

2 に答える 2

1

問題はforeachループにあります。これをループに変更するforと、バインドが正しく機能するはずです。

以下の同様の質問と回答を確認してください。

ASP.NET MVC 4 - for ループはモデル コレクションのプロパティをポストしますが、foreach はポストしません

MVC カミソリ @foreach

于 2013-09-30T15:52:23.857 に答える
0

私はあなたに部分的な答えを与えることができます。リスト項目をロードして HttpPost で返されるようにするには、ビューでこれを行う必要があります

for(int idx = 0;idx < Model.Rate.Count;idx++)
{
    @Html.TextBox("Foo", Model.Rate[idx])
}

重要なアイデアは@Html.TextBox("Foo", Model.Rate[idx])、Rate リスト項目を参照するときにインデクサーを使用する必要があるということです。そうすれば、ポストバックすると、MVC モデル バインダーはリスト アイテムを、それらのアイテムへの変更を含めて取得できます。

ユーザーが追加した新しいアイテムのピックアップについては、よくわかりません。多分別のSOユーザーが助けることができますか?しかし、うまくいけば、私の答えがいくらか役に立ちます。

于 2013-09-30T15:51:39.920 に答える