#asp.net #asp.net-mvc-3 #c#-4.0
#asp.net #asp.net-mvc-3 #c #-4.0
Вопрос:
Я просто скопировал некоторый код из asp.net приложение mvc 2, которое работает. Теперь я пробую это в asp.net mvc 3 и он не вызывает метод сохранения на контроллере?
контроллер:
[HttpPost]
public JsonResult save(string inputdata)
{
return Json(new { Result = string.Format("From the controller - you have clicked the GO-button ! ") }, JsonRequestBehavior.AllowGet);
}
Вид:
<button id="but">go</button>
<div id=result></div>
<script type="text/javascript">
$(document).ready(
$("#but").click(
function () {
$.ajax({
url: "/Home/save",
dataType: "json",
type: 'POST',
data: "test",
success: function (result) {
$("#result").html(result.Result);
}
});
}
)
);
</script>
Ответ №1:
Вы неправильно передаете данные. Вызывается аргумент действия inputdata
. Поэтому вы должны использовать это же имя в data
хэше запроса AJAX:
$.ajax({
url: '/Home/save',
dataType: 'json',
type: 'POST',
data: { inputdata: 'test' },
success: function (result) {
$('#result').html(result.Result);
}
});
Также никогда не вводите жесткие URL-адреса в свой javascript, всегда используйте помощники url, иначе ваше приложение просто перестанет работать при развертывании из-за возможности наличия имени виртуального каталога:
$.ajax({
url: '@Url.Action("save", "home")',
dataType: 'json',
type: 'POST',
data: { inputdata: 'test' },
success: function (result) {
$('#result').html(result.Result);
}
});
Еще одна проблема, с которой вы сталкиваетесь в своем коде, заключается в том, что вы не отменяете действие кнопки по умолчанию, что означает, что если это ссылка на действие или кнопка отправки, запрос AJAX может никогда не успеть выполнить до перенаправления браузера.
Также вам не нужно указывать dataType
to JSON, поскольку jQuery достаточно умен, чтобы вывести это из заголовка ответа типа содержимого, отправленного с сервера.
Таким образом, окончательная версия должна выглядеть примерно так:
<script type="text/javascript">
$(function() {
$('#but').click(function () {
$.ajax({
url: '@Url.Action("save", "home")',
type: 'POST',
data: { inputdata: 'test' },
success: function (result) {
$('#result').html(result.Result);
}
});
return false;
});
});
</script>