2011-02-09 26 views
0

私は、価格と一緒に製品のリストを表示する価格設定ページを持っています。ユーザーは複数の商品をショッピングカートに追加することができます(アクティブなショッピングカートはページの右側に表示されています)。あなたから見ることができるようにASP.NET MVCショッピングカート&jQuery

<% foreach (var _product in _supplier.HotelProducts) 
    { %> 
    <tr> 
     <td colspan="2" align="left" valign="top"><% = _product.Description %></td> 
     <td align="left"> 
      <% using (Html.BeginForm("AddToCart", "ShoppingCart", FormMethod.Post, new { @class = "addProductToCartForm" })) 
       { %> 
       <input type="hidden" name="hSupplierID" id="hSupplierID" value="<% = _supplier.ID %>" /> 
       <input type="hidden" name="hProductCode" id="hProductCode" value="<% = _product.Code %>" /> 
       <input type="hidden" name="hProductDescription" id="hProductDescription" value="<% = _product.Description %>" /> 
       <input type="hidden" name="hProductPrice" id="hProductPrice" value="<% = _product.TotalPrice %>" /> 
       <input type="submit" value="+ Add to cart" /> 
      <% } %> 
     </td> 
     <td valign="top" align="center"> 
      <span id="spanProductPrice" class="_price">$<% = _product.TotalPrice %></span> 
     </td> 
    </tr> 
<% } %>  

:ViewModelにに利用可能な製品のthroループと詳細を表示:現在、これは...私はアヤックス/ jqueryのを使用して、それを実装したどのように私の意見(ASPX)から

コードスニペットです上記のコードスニペットで、私は "+カートに追加"ボタンを各製品に追加し、私の要件は、コントローラとカートにSupplierIDとProduct details(Code、Desc & Price)を渡すことです。私は製品の一覧を&の外部Webサービスから取得しており、製品コードを渡して対応する説明&のサーバー側の価格を取得する方法はないので、ユーザーが追加するときに必要な製品の詳細をキャプチャする必要がありますそれをカートに入れる。ここで

$(function() { 
    $(".addProductToCartForm").submit(function (e) { 
     e.preventDefault(); 
     var HiddenCartForm = { 
      SupplierID: $(this.hSupplierID).val(), 
      Code: $(this.hProductCode).val(), 
      Description: $(this.hProductDescription).val(), 
      TotalPrice: $(this.hProductPrice).val() 
     }; 
     $.post($(this).attr("action"), HiddenCartForm, function (data) { 
      //alert("Success"); 
      renderCart(data); 
     }); 
     return false; // form already submitted using ajax, don't submit it again the regular way 
    }); 
}); 

function renderCart(data) { 
    $("#rightColumn").html(data); 
} 

が、私はjQueryの

public class HiddenCartForm 
    { 
     public string SupplierID { get; set; } 
     public string Code { get; set; } 
     public string Description { get; set; } 
     public decimal? TotalPrice { get; set; } 
     //public ProductView Product { get; set; } 
    } 

を介してコントローラには、[Viewからの情報を渡すために使用私のカスタムHiddenCartFormオブジェクトは、私は2つの質問持っている:

を[1]に良い方法はありますこのシナリオを処理しますか?私は少し多くのフォーム&の隠しフィールド(SupplierID &製品の詳細を保持するために)で少し不快です。これらのフォーム&隠しフィールドは、誰かがソースを表示しているときに表示されます。

[2]ユーザーが特定の商品をショッピングカートに追加すると、「_product」の情報がすべて必要です。隠しフィールドを使用する代わりにJQuery経由でこの情報を渡すより良い方法はありますか?foreach (var _product in _supplier.HotelProducts)私の見解では製品をループしていますか?

私は現在MVC 2にいます。

答えて

0

なぜフォームの商品に商品の説明と価格を渡す必要がありますか? AJAXポストを扱うコントローラーアクションは、それらの値をデータベースから見えるようにできませんでしたか?モデルの定義方法によっては、同様の理由でサプライヤIDも削除される可能性があります。

+0

ケビン、私は外部WebServiceを呼び出すことによって製品とその価格のリストを取得し、この情報はローカルDBに保存されていません...したがって、私は単に製品コードを渡し、対応する説明と価格を取得する方法はありませんそれがユーザーがカートに追加するときに必要な製品の詳細をキャプチャする必要があるからです。サプライヤの詳細情報を表示する必要がありますが、ローカルDBにサプライヤデータがあるので、SupplierIDを渡してコントローラ内の他の情報を参照しますが、製品に対して同じ情報を表示することはできません。( – Alex

+0

あなたがその外部Webサービスに電話をかけたとき(そしてある期間の後にそれを削除するとき)、あなたのローカルデータベースへの製品とその価格データを保存することができます(隠しフィールドに保存することの問題は、価格を$ 0にして、無料でアイテムを手に入れよう)。 –

+0

ありがとうKevin、私はそれらの行について考えています。 – Alex

関連する問題