Как я могу получить «данные» из jQuery Ajax на стороне сервера?

0

Как я могу получить "данные", которые отправляются от клиента? (в поле "данные")

<script type="text/javascript">
    $(function () {
        $('#btnAddProductAjax').click(function () {
            var name = $('#txtProductName').val();
            var units = $('#txtUnitsInStock').val();
            var price = $('#txtPrice').val();

            $.ajax({
                url: '@Url.Action("AddProductAjax", "Home")',
                type: 'POST',
                dataType: 'JSON',
                data: {
                    productname: name,
                    unitsinstock: units,
                    price: price
                },
                success: function (data) {                        
                    $('#divResult').html(data);
                    alert('Product added successfully');
                }
            });
        });
    });
</script>

Как я могу использовать эти данные?

data: {
    productname: name,
    unitsinstock: units,
    price: price
 },

в моем действии на стороне сервера "AddProductAjax"?

public JsonResult AddProductAjax(string data)
{
    //retrieve data which is sent from client and do something
    return Json(json_data);
}

Я пытался:

  • для получения данных из Request.QueryString []
  • AddProductAjax (имя строки, int units, int price)
  • AddProductAjax (Product prod)

Googled часами, никакого результата

UPD: Если я определяю действие как

    AddProductAjax(string productname, int unitsinstock, decimal price) 

- Ничего не произошло. Ajax даже не вызывает это действие. Если я попробую

    AddProductAjax(string productname, string unitsinstock, string price)

- в отладчике все поля пустые!

Теги:
asp.net-mvc

1 ответ

0
Лучший ответ

Это помогает указать MVC, какой тип запроса должен ожидать действие с использованием атрибутов. Оба HttpPost и HttpGet находятся в System.Web.Mvc.

Как это:

[HttpPost]
public JsonResult AddProductAjax(string productname, int unitsinstock, 
                                 decimal price)
{
    //logic...

    return Json(json_data);
}

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

[HttpPost]
public JsonResult AddProductAjax(string productname, string unitsinstock, 
                                 string price)
{
    int units = 0;
    int.TryParse(unitsinstock, out units);

    decimal decPrice = 0.00;
    decimal.TryParse(price, out decPrice);

    //logic...

    return Json(json_data);
}
  • 0
    Если я определю действие как AddProductAjax (строка productname, int unitsinstock, десятичная цена) - ничего не произойдет. Аякс даже не называет это действие. Если я попробую AddProductAjax (строка productname, строка unitsinstock, string price) - в отладчике все поля пусты!
  • 0
    Важно, чтобы имена параметров в вашем определении Action совпадали с именами значений в вашем объекте data , отправляемом из вызова AJAX. Вы можете попробовать добавить [HttpPost] над определением действия. Я обновлю свой ответ, чтобы продемонстрировать это.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню