我有一个定价页面,显示产品列表及其价格。用户可以选择将多个产品添加到购物车(活动购物车显示在页面的右侧)。目前,这是我使用Ajax / Jquery实现它的方式......
我视图中的代码段(ASPX):在ViewModel中循环可用产品并显示详细信息:
<% 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>
<% } %>
正如您从上面的代码片段中看到的,我在每个产品上都有“+添加到购物车”按钮,我的要求是将SupplierID和产品详细信息(代码,描述和价格)传递给我的控制器和购物车。请注意,我获得了产品清单和他们从外部网络服务定价,我无法通过产品代码并检索相应的描述&amp;服务器端的价格,这就是我需要在用户将其添加到购物车时捕获所需产品详细信息的原因。
$(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);
}
这是我自定义的HiddenCartForm对象,我用它通过JQuery将信息从View传递给Controller
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; }
}
我有两个问题:
[1]有没有更好的方法来处理这种情况?我对这么多表格感到不舒服。在视图上隐藏字段(用于保存SupplierID和产品详细信息)。这些形式&amp;当某人查看来源时,隐藏字段将可见。
[2]当用户将特定产品添加到购物车时,我几乎需要“_product”中的所有信息。有没有更好的方法通过JQuery传递此信息而不是使用隐藏字段,因为我在视图中循环产品foreach (var _product in _supplier.HotelProducts)
?
我目前在MVC 2上。
答案 0 :(得分:0)
为什么您需要在表单中传递产品的说明和价格?处理AJAX帖子的控制器操作无法从数据库中查找这些值吗?根据模型的定义方式,供应商ID也可能因类似原因而被删除。