Как я могу получить "данные", которые отправляются от клиента? (в поле "данные")
<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);
}
Я пытался:
Googled часами, никакого результата
UPD: Если я определяю действие как
AddProductAjax(string productname, int unitsinstock, decimal price)
- Ничего не произошло. Ajax даже не вызывает это действие. Если я попробую
AddProductAjax(string productname, string unitsinstock, string price)
- в отладчике все поля пустые!
Это помогает указать 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);
}
data
, отправляемом из вызова AJAX. Вы можете попробовать добавить[HttpPost]
над определением действия. Я обновлю свой ответ, чтобы продемонстрировать это.