0

ショッピング カートに追加されたアイテム数の数量セレクターを実装しようとしています。

カタログ内のアイテムの各行に動的な名前のテキスト ボックスがあります。各行には「カートに入れる」ボタンがあります。

テキストボックスに希望の数量を入力して「カートに入れる」ボタンをクリックすると、選択したアイテムの入力された数量がカートに追加されます。

カートのデータベースに新しい数量を追加するコントローラー アクションは次のとおりです。

public ActionResult AddToCart(int productID, int quant)
{
    repository.AddItemToOrder(productID, quant);
    return RedirectToAction("Browse");
}

「Browse」アクションを呼び出してページを再度レンダリングすることは、最も効率的な方法ではないことを私は知っています。それについては後で説明します。

私の質問は、この "AddToCart" コントローラー アクションを両方のパラメーターで呼び出すにはどうすればよいですか?

1つのパラメーターで動作するバージョンを取得できました。この場合、上記のコントローラ アクションの 2 番目のパラメータ quant が削除されました。

私のビューの行は次のとおりです。

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'  " value="Add to Cart" />

これはうまくいきましたが、数量のテキストボックスを参照できるようにする必要があります。

ビューに複数のパラメーターを含む次の行を試しました。

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'+'?quant=<%: item.ProductID %>'  " value="Add to Cart" />

「quant」に割り当てられる値は、「productID」に割り当てられる値と同じです。私は単に何かを正しく動作させるためにこれを行いました。機能したら、動的な名前を持つテキストボックスの値を使用する予定です。(私もそれについていくつかの助けが必要です)

行のボタンをテストしてクリックすると、次のエラーが表示されました。

パラメーター ディクショナリには、'OER.Controllers.eCommerceController' のメソッド 'System.Web.Mvc.ActionResult AddToCart2(Int32, Int32)' の null 非許容型 'System.Int32' のパラメーター 'productID' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

4

2 に答える 2

2

別の...単純なタイプミス&ではなく、クエリ文字列内の変数の間にアンパサンドが必要です。?

/AddToCart?productId=3&quant=1

デフォルト値を与えたい場合quantは、常に必要というわけではありません。アクション メソッドを次のように変更できます。

public ActionResult AddToCart(int productID, int quant = 1)

あなたのコメントに基づいて、ボタンをすべてに絞り込むのではなく、ボタンが送信するフォームを設定しますonclick

@using(Html.BeginForm("AddToCart")) {
    @Html.Hidden("productId", item.ProductId)
    @Html.Input("quant")
    <input type="submit" value="Add to Cart" />
}

ボタンではなく通常のリンクのみに切り替えたい場合は、jQuery を接続してquant、クリック時にテキスト ボックスからパラメーターを取得する必要があります。

$('.addToCartLink').click(function() {  // All the "add to cart" links would have this class
    // Pull the product ID (just an example)
    var productId = $(this).attr('data-id');
    // Set the quantity
    var quantity = $('#txtlinequantity-'+productId).val();
    // Possible validation here
    ...
    // Hit the action method
    window.location = '/AddToCart?productId='+productId+'&quant='+quantity;
});
于 2011-06-21T22:24:51.320 に答える
0

したくないですか

<input type="button" value="<%: item.ProductID %>" name="productID" id="productID"/>

あなたが送信しているフォームの中に?

フォーム要素が送信されている場合、MVC は必要な情報を自動的に取得し、nameフィールド (またはid) に基づいてコード ビハインド内の同等の変数に割り当てます。フィールドは、value対応する変数に割り当てる値です。

于 2011-06-21T22:30:13.263 に答える