2011-02-09 139 views
0

我有一個定價頁面,其中顯示產品列表及其價格。用戶可以選擇添加多個產品到購物車(活動購物車正在顯示在頁面的右側)。目前,這是我如何使用Ajax/jQuery的實現了它......從我的觀點(ASPX)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> 
<% } %>  

正如你可以看到從上面的代碼段,我有「+加入購物車」按鈕againts每個產品,我的要求是將我的控制器和購物車通過SupplierID和產品詳細信息(代碼,說明&價格)。請注意,我從外部網絡服務獲得產品的價格清單&,並且我無法通過產品代碼並在服務器端檢索相應的描述價格,這就是爲什麼我需要在用戶添加時捕獲所需產品詳細信息的原因它來購物車。

$(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); 
} 

這裏是我用來從View傳遞信息通過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; } 
    } 

來控制我的自定義HiddenCartForm對象我有兩個問題:

[1]有沒有更好的辦法處理這種情況?我有點不舒服,在視圖上有很多隱藏字段(用於存放SupplierID &產品詳細信息)。這些表格&隱藏的字段將在有人查看源代碼時可見。

[2]當用戶將特定產品添加到購物車時,我幾乎需要「_product」中的所有信息。有沒有更好的方式來通過JQuery傳遞這些信息,而不是使用隱藏字段,因爲我在我看來循環了產品foreach (var _product in _supplier.HotelProducts)

我目前在MVC 2上。

回答

0

爲什麼您需要在表單文章中傳遞產品的描述和價格?處理AJAX文章的控制器操作無法從數據庫中查看這些值嗎?根據模型的定義,供應商ID也可能因爲類似的原因而被刪除。

+0

Kevin,我通過調用外部WebService獲取產品及其定價列表,並且此信息不會保留在本地數據庫中......因此,我無法通過產品代碼並檢索相應的說明和價格服務器端,這就是爲什麼當用戶將其添加到購物車時,我需要捕獲所需的產品詳細信息。我需要爲供應商顯示更多信息,但由於我在本地數據庫中有供應商數據,因此我僅傳遞供應商ID並在控制器中查找其他信息,但我無法對產品執行相同操作:( – Alex 2011-02-09 22:30:42