3

ユーザーが製品のテーブルを持っている次のビューがあり、「数量> 0」のデフォルトが0であるすべてのデータを選択する必要があります。しかし、テーブルからデータのコレクションを取得する方法がわかりません。返信ありがとうございます。

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
<fieldset>
    <legend>Produkty</legend>
    <table>
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(model => item.Product.Name)
            </td>

            <td>
                @Html.DisplayFor(model => item.Product.Price)
            </td>
            <td>
                @Html.EditorFor(model => item.Quantity)
            </td>
        </tr>
    }
        <p>
            <input type="submit" value="Orders" />
        </p>

    </table>
</fieldset>
}

//コントローラ

 public ActionResult Index()
    {
        List<ProductListViewModel> productList = new List<ProductListViewModel>();

        foreach (var item in db.Products.ToList())
        {
            ProductListViewModel model = new ProductListViewModel();
            model.Product = item;
            model.Quantity = 0;
            productList.Add(model);
        }

        return View(productList);
    }
4

1 に答える 1

3

Html.EditorFor を使用しているので、簡単です。index アクション (Post 用) に productList をパラメーターとして配置すると、MVC はフォーム データを productList オブジェクトに自動的に結合するため、サーバー側で数量をループでフィルター処理するだけです。もちろん、製品オブジェクトを識別するには、ビューに非表示の ID も追加することをお勧めします。

<table>
@for(int i = 0; i<Model.Count; i++) {
    <tr>
        <td>
            @Html.HiddenFor(model => Model[i].Product.ID)
            @Html.DisplayFor(model => Model[i].Product.Name)
        </td>
        <td>
            @Html.EditorFor(model => Model[i].Quantity)
        </td>
    </tr>
}


[HttpPost]
public ActionResult Index(List<ProductListViewModel> productList)
    {
        \\...
    }
于 2012-12-12T08:04:25.653 に答える