ASP.NET MVC Корзина и jQuery - PullRequest
       2

ASP.NET MVC Корзина и jQuery

0 голосов
/ 10 февраля 2011

У меня есть страница с ценами, которая отображает список продуктов вместе с их ценами. Пользователь может добавить несколько товаров в корзину (активная корзина отображается в правой части страницы). В настоящее время это то, как я реализовал это, используя 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>
<% } %>    

Как вы можете видеть из приведенного выше фрагмента кода, у меня есть кнопка «+ Добавить в корзину» для каждого продукта, и мое требование - передать идентификатор поставщика и сведения о продукте (код, стоимость и цена) на мой контроллер и корзину. Обратите внимание, что я получаю список продуктов и их цены от внешнего веб-сервиса, и у меня нет возможности просто передать код продукта и получить соответствующее описание и цену на стороне сервера, поэтому мне нужно собирать необходимые сведения о продукте, когда пользователь добавляет это в корзину.

$(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, который я использую для передачи информации из View в Controller через 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; }
    }

У меня ДВА вопроса:

[1] Есть ли лучший способ справиться с этим сценарием? Мне немного не по себе от такого количества форм и скрытых полей (для хранения идентификатора поставщика и сведений о продукте) в представлении. Эти формы и скрытые поля будут видны, когда кто-то просматривает источник.

[2] Мне нужна почти вся информация из "_product", когда пользователь добавляет определенный продукт в корзину. Есть ли лучший способ передать эту информацию через JQuery вместо использования скрытых полей, когда я зацикливаюсь на продуктах foreach (var _product in _supplier.HotelProducts) на мой взгляд?

Я сейчас нахожусь на MVC 2.

1 Ответ

0 голосов
/ 10 февраля 2011

Зачем вам нужно указывать описание товара и цену в бланке?Может ли действие контроллера, обрабатывающее запись AJAX, найти эти значения в базе данных?В зависимости от того, как определена модель, идентификатор поставщика также может быть удален по тем же причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...