MVC2 Попытка передать несколько параметров в ActionResult на основе текстового поля с динамическим именем - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь реализовать селектор количества для количества товаров, добавленных в корзину.

У меня есть текстовое поле с динамическим именем для каждой строки товаров в каталоге.В каждой строке есть кнопка «Добавить в корзину».

Если я введу нужное количество в текстовое поле и нажму кнопку «Добавить в корзину», я хочу, чтобы введенное количество выбранного элемента было добавлено к моемуКорзина.

Действие контроллера, которое добавляет новое количество в базу данных для корзины, выглядит следующим образом:

public ActionResult AddToCart(int productID, int quant)
{
    repository.AddItemToOrder(productID, quant);
    return RedirectToAction("Browse");
}

Я знаю, что вызов действия "Обзор" для повторной визуализации страницыне самый эффективный метод.Я расскажу об этом позже.

Мой вопрос: как мне выполнить вызов этого действия контроллера «AddToCart» с обоими параметрами?

Мне удалось получить версию, работающую с 1параметр.В этом случае второй параметр в приведенном выше действии контроллера, Quant, был удален.

Строка в моем представлении была:

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'  " value="Add to Cart" />

Хотя это сработало, мне нужно иметь возможность ссылаться на текстовое поле для количества.

Я пробовал следующую строкуэто включает в себя несколько параметров в моем представлении:

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'+'?quant=<%: item.ProductID %>'  " value="Add to Cart" />

Значение, присвоенное «количеству», совпадает со значением, присвоенным «идентификатору продукта».Я сделал это, чтобы просто заставить что-то работать правильно.Как только он заработает, я планирую использовать значение текстового поля с динамическим именем.(В этом мне тоже нужна помощь)

Когда я проверил и нажал кнопку строки, я получил следующую ошибку:

Словарь параметров содержит пустую запись для параметра 'productID'необнуляемого типа' System.Int32 'для метода' System.Web.Mvc.ActionResult AddToCart2 (Int32, Int32) 'в' OER.Controllers.eCommerceController '.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Вам нужен амперсанд & между переменными в строке запроса, а не другая ? ... простая опечатка.

/AddToCart?productId=3&quant=1

Если вы хотите задать для quant значение по умолчанию,так что это не всегда требуется, вы можете изменить свой метод действия на что-то вроде:

public ActionResult AddToCart(int productID, int quant = 1)

На основе ваших комментариев я бы настроил форму, которую будет отправлять кнопка, вместо того, чтобы сжать все это вonclick:

@using(Html.BeginForm("AddToCart")) {
    @Html.Hidden("productId", item.ProductId)
    @Html.Input("quant")
    <input type="submit" value="Add to Cart" />
}

Если вы хотите переключиться на обычную ссылку вместо кнопки, вам нужно подключить некоторый jQuery для извлечения параметра quant из текстового поля при нажатии..

$('.addToCartLink').click(function() {  // All the "add to cart" links would have this class
    // Pull the product ID (just an example)
    var productId = $(this).attr('data-id');
    // Set the quantity
    var quantity = $('#txtlinequantity-'+productId).val();
    // Possible validation here
    ...
    // Hit the action method
    window.location = '/AddToCart?productId='+productId+'&quant='+quantity;
});
0 голосов
/ 22 июня 2011

Разве вы не хотите

<input type="button" value="<%: item.ProductID %>" name="productID" id="productID"/>

внутри формы, которую вы отправляете?

Если у вас есть элемент формы, MVC автоматически вытянетнеобходимую информацию и присвойте ее эквивалентной переменной в вашем коде на основе поля name (или id).Поле value - это значение, присваиваемое соответствующей переменной.

...