1

私は現在、次のようなビューを持っています:

@using (Html.BeginForm("Compare", "Carousel", FormMethod.Post)) 
{
@foreach (var product in Model.Products)
{
        <tr>
             <td>@product.Provider.Name</td>
             <td>&pound;@Math.Round(product.MonthlyPremium, 2, MidpointRounding.AwayFromZero)</td>
             <td>@Html.ActionLink("More Details", "MoreDetails", new { id = product.ProductId })</td>
             <td><button name="compare" value="@product.ProductId">Compare</button</td>
        </tr>
}
}

コントローラ:

[HttpPost]
public ActionResult Compare(ProductsWithDetailModel model) // This is a guess, Model may not persist? 
 {
       // Code here

       return View("Index", model);
 }

私が実際に望んでいるのは、ボタンがクリックされるとコントローラーが呼び出され、選択された (ボタンがクリックされた) 製品がアイテムのリストに追加されることです。

コントローラーでどのボタンがクリックされたかを実際に確認するにはどうすればよいですか? これまでにこれを行ったチュートリアルがウェブ上で見つからないのはなぜですか。確かにその基本的な機能ですか? それとも私はそれに間違って近づいていますか?

4

3 に答える 3

2

アイテムごとに1つのフォームを用意するのはどうですか?

例えば

@foreach (var product in Model.Products)
{
    <tr>
         <td>@product.Provider.Name</td>
         <td>&pound;@Math.Round(product.MonthlyPremium, 2, MidpointRounding.AwayFromZero)</td>
         <td>@Html.ActionLink("More Details", "MoreDetails", new { id = product.ProductId })</td>
         <td>
             @using (Html.BeginForm("Compare", "Carousel", FormMethod.Post)) 
             {
                 <input type="hidden" name="productId" value="@product.ProductId"  />
                 <button name="compare">Compare</button>
             }
         </td>
    </tr>
}
于 2012-11-23T20:04:41.913 に答える
2

ASP.NET MVC はすべての入力を受け取り、動詞によってアクションに送信します。これらのコントロールのバインドはname、ビューの属性によって作成され、値は、話しているコントロール (テキスト、チェックボックス、ラジオ、選択、ボタンなど) に応じて作成されます。ProductsWithDetailModel呼び出された比較にプロパティを設定すると、クリックしたボタンの値を受け取ることができます。

于 2012-11-23T19:59:08.457 に答える
0

オンクリックを使用します。ループ内に js 隠し値を設定します。コントローラーチェック中。

于 2012-11-23T20:01:58.113 に答える