Ваш текущий код отображает тег привязки и нажимает на него, чтобы выполнить запрос GET с идентификатором в строке запроса. Если вы хотите отправить выбранное значение из выпадающего списка, вам нужно прочитать и отправить его.
Сначала обновите код, в котором вы отображаете ссылку, чтобы она создала атрибут Id
для тега a
, который мы можем использовать позже в javascript для переопределения поведения по умолчанию при щелчке.
@Html.ActionLink("Add to cart", "AddToCartWithQuantity", "ShoppingCart",
new { id = Model.Id },new { id = "addToCart" } )
Будет отображен тег привязки с идентификатором addToCart
.
Теперь вы можете иметь некоторый javascript, который прослушивает событие click для этого тега привязки, предотвращает поведение по умолчанию (переход к целевому URL) и отправляет нужные нам данные. Вот пример выполнения сообщения Ajax
$(function (){
$("#addToCart").click(function (e){
e.preventDefault();
var url = $(this).attr("href");
url = url + '?chosenQuantity=' + $("#ChosenQuantity").val();
$.post(url).done(function (res){
if (res.status === "success")
{
//update cart UI
alert(res.cartItemCount);
}
});
});
});
Теперь, когда мы выполняем отправку ajax, давайте вернем JSON-ответ со статусом и свойством cartItemCount
. Наш js-код проверяет это, чтобы увидеть, было ли действие успешным в событии ajax call done
. Также, поскольку нам нужны только Id и количество, вам не нужно использовать сущность Product
в качестве параметра. Используйте простой int
тип для Id
[HttpPost]
public ActionResult AddToCartWithQuantity(int id, int chosenQuantity)
{
// Your existing code to save. Use id to get the product
// to do :replace the hard coded 1 with actual value from db
return Json(new { status = "success", cartItemCount = 1 });
}
Другим вариантом является отправка формы. В этом случае оберните ваш SELECT и ссылку внутри элемента формы (с действием, установленным на /ShoppingCart/AddToCartWithQuantity
) и выполните отправку формы при нажатии на ссылку.
<form action='@Url.Action("AddToCartWithQuantity","ShoppingCart")' method='post'>
<!-- SELECT and Link goes here-->
</form>
и скрипт будет
$(function (){
$("#addToCart").click(function (e){
e.preventDefault();
$(this).closest("form").submit();
});
});
Поскольку наш код выполняет полную отправку формы, убедитесь, что ваш метод действия возвращает результат перенаправления.
[HttpPost]
public ActionResult AddToCartWithQuantity(NewProjectModel product, int chosenQuantity)
{
// Your existing code to save
return RedirectToAction("Index","ShoppingCart");
}