2

dbml に Product というテーブルがあります。

私のコントローラーには、次のLINQがあります...

public ActionResult Index(int id)
    {
        using (orbitDataContext = new OrbitDataContext())
        {
            var products = (from p in orbitDataContext.Products
                            where p.EventId == id
                            select p).ToList();

            return View(products);
        }
    }

私の見解では、私は次のことを持っています...

@model IList<MVC.Product>

@{
    ViewBag.Title = "Products";
}

<h2>Products</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<p>
    <input type="submit" value="Delete Selected" />
</p>

@foreach (var item in Model)
{
    <ul>
        <li>@item.Description | @item.ProductCode | @item.Price</li>
    </ul> 
}

表示された各製品に対してチェックボックスを表示して、ユーザーが複数の製品をチェックしてから、選択した製品をコントローラーに送り返すボタンをクリックして、それらを削除できるようにする方法を誰か説明してください。

4

1 に答える 1

1

潜在的な答えにたどり着く前に、いくつかの指針があります。

ビュー モデルを使用する代わりに、ドメイン モデルをビューに戻さないでください。

public class YourViewModel
{
     public List<Product> Products { get; set; }
}

次のように、コントローラーからデータの取得を分離します。

public ActionResult YourActionMethod()
{
     YourViewModel viewModel = new YourViewModel
     {
          Products = productService.FindAll()
     }

     return View(viewModel);
}

あなたの見解では、次のようなことを試すことができます:

<ul>
     @for (int i = 0; i < Model.Products.Count(); i++)
     {
          <li>
               @Html.CheckBoxFor(x => x.Products[i].IsSelected)
               @Html.DisplayFor(x => x.Products[i].Description) @Html.HiddenFor(x => x.Products[i].Description)
               @Html.DisplayFor(x => x.Products[i].ProductCode) @Html.HiddenFor(x => x.Products[i].ProductCode)
               @Html.DisplayFor(x => x.Products[i].Price) @Html.HiddenFor(x => x.Products[i].Price)
          </li>
     }
</ul>

これは完璧ではないかもしれませんが、途中であなたを助けることができます. それが役に立てば幸い。

于 2013-07-11T08:28:37.033 に答える