Создание простого вызова Ajax для контроллера в asp.net mvc
Я пытаюсь начать работу с вызовами ASP.NET MVC Ajax.
Контроллер:
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Вид:
<head runat="server">
<title>FirstAjax</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var serviceURL = '/AjaxTest/FirstAjax';
$.ajax({
type: "POST",
url: serviceURL,
data: param = "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
alert(data);
}
function errorFunc() {
alert('error');
}
});
</script>
</head>
Мне просто нужно распечатать предупреждение с помощью метода контроллера, возвращающего данные. Над кодом просто напечатайте "chamara" на моем представлении. Предупреждение не срабатывает.
UPDATE
Я изменил свой контроллер, как показано ниже, и начал работать. У меня нет четкого представления, почему он работает сейчас. Кто-нибудь, пожалуйста, объясните. Параметр "a" не связан, я добавил его, потому что я не могу добавить два метода с тем же именем метода и параметрами. Я думаю, что это может быть не решение, а его работающий
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Ответы
Ответ 1
После выполненного обновления
- его первый вызов действия FirstAjax с запросом HttpGet по умолчанию
и отображает пустой вид Html. (Раньше у вас его не было)
- позже при загрузке элементов DOM этого просмотра ваш Ajax-вызов активируется и отображает предупреждение.
Раньше вы только возвращали JSON в браузер без визуализации какого-либо HTML. Теперь он имеет HTML-представление, в котором он может получить данные JSON.
Вы не можете напрямую отображать JSON свои простые данные, а не HTML.
Ответ 2
Удалите атрибут данных, поскольку вы не POSTING
ничего для сервера (ваш контроллер не ожидает каких-либо параметров).
И в вашем методе AJAX вы можете использовать Razor
и использовать @Url.Action
вместо статической строки:
$.ajax({
url: '@Url.Action("FirstAjax", "AjaxTest")',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
Из вашего обновления:
$.ajax({
type: "POST",
url: '@Url.Action("FirstAjax", "AjaxTest")',
contentType: "application/json; charset=utf-8",
data: { a: "testing" },
dataType: "json",
success: function() { alert('Success'); },
error: errorFunc
});
Ответ 3
Используйте Razor для динамического изменения URL-адреса, вызвав ваше действие следующим образом:
$.ajax({
type: "POST",
url: '@Url.Action("ActionName", "ControllerName")',
contentType: "application/json; charset=utf-8",
data: { data: "yourdata" },
dataType: "json",
success: function(recData) { alert('Success'); },
error: function() { alert('A error'); }
});
Ответ 4
Это для вашего вопроса UPDATE.
Поскольку у вас не может быть двух методов с тем же именем и сигнатурой, вы должны использовать атрибут ActionName:
UPDATE:
[HttpGet]
public ActionResult FirstAjax()
{
Some Code--Some Code---Some Code
return View();
}
[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
Some Code--Some Code---Some Code
return View();
}
И обратитесь к этой ссылке, чтобы узнать, как метод становится действием. Очень хорошая рекомендация.
Ответ 5
Во-первых, нет необходимости иметь две разные версии jquery-библиотек на одной странице, либо "1.9.1", либо "2.0.0" достаточно для работы ajax-вызовов.
Вот ваш код контроллера:
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Вот как выглядит ваше мнение:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var a = "Test";
$.ajax({
url: "../../Home/FirstAjax",
type: "GET",
data: { a : a },
success: function (response) {
alert(response);
},
error: function (response) {
alert(response);
}
});
});
</script>
Ответ 6
Если вам просто нужно нажать С# Method на вашем Ajax Call, вам просто нужно передать два типа материи и url, если ваш запрос будет получен, вам просто нужно указать только URL. пожалуйста, следуйте приведенному ниже коду.
C# Code
[HttpGet]
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Java Script Code if Get Request
$.ajax({
url: 'home/FirstAjax',
success: function(responce){ alert(responce.data)},
error: function(responce){ alert(responce.data)}
});
Java Script Code if Post Request and also [HttpGet] to [HttpPost]
$.ajax({
url: 'home/FirstAjax',
type:'POST',
success: function(responce){ alert(responce)},
error: function(responce){ alert(responce)}
});
Примечание. Если вы FirstAjax в том же контроллере, в котором ваш контроллер просмотра не нуждается в имени контроллера в URL-адресе. как url: 'FirstAjax',
Ответ 7
вместо url: serviceURL,
использовать
url: '<%= serviceURL%>',
и передаете ли вы 2 параметра successFunc?
function successFunc(data)
{
alert(data);
}
Ответ 8
Добавить "JsonValueProviderFactory" в global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
Ответ 9
Просмотр;
$.ajax({
type: 'GET',
cache: false,
url: '/Login/Method',
dataType: 'json',
data: { },
error: function () {
},
success: function (result) {
alert("success")
}
});
Метод контроллера;
public JsonResult Method()
{
return Json(new JsonResult()
{
Data = "Result"
}, JsonRequestBehavior.AllowGet);
}