Сделать простой 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);
}
}
View:
<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>
мне просто нужно распечатать предупреждение с помощью метода контроллера, возвращающего данные. Выше кода просто напечатать "Чамара" на мой взгляд. Тревога не срабатывает.
обновление
Я изменил свой контроллер, как показано ниже, и он начинает работать. У меня нет четкого представления, почему это работает сейчас. Некоторые пожалуйста, объясните. Параметр " a " не связан я добавил его, потому что я не могу добавить два метода с одинаковым именем метода и параметрами.Я думаю, что это может быть не решение, но его работа
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
9 ответов:
после обновления вы сделали,
- его первый вызов действия FirstAjax с запросом HttpGet по умолчанию и отображает пустое представление Html . (Раньше у вас этого не было)
- позже при загрузке элементов DOM этого представления ваш вызов Ajax запускается и отображает предупреждение.
ранее вы только возвращали JSON в браузер без рендеринга любого HTML. Теперь у него есть представление HTML, где он может получить ваши данные JSON.
вы не можете напрямую отображать JSON его простые данные, а не HTML.
удалить атрибут данных, как вы не
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 });
используйте бритву для динамического изменения 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'); } });
Это для вашего вопроса обновления.
поскольку у вас не может быть двух методов с одинаковым именем и подписью, Вы должны использовать атрибут ActionName:
обновление:
[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(); }и см. этой ссылка для дальнейшей ссылки на то, как метод становится действием. Очень хорошая ссылка, хотя.
во-первых,нет необходимости иметь две разные версии библиотек 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>
Если вам просто нужно нажать метод C# в вашем вызове Ajax, вам просто нужно передать два типа материи и url-адрес, если ваш запрос get, вам просто нужно указать только 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',
View;
$.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); }
вместо
url: serviceURL,используйтеurl: '<%= serviceURL%>',и вы передаете 2 параметра successFunc?
function successFunc(data) { alert(data); }
добавить "JsonValueProviderFactory" в global.асакс:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); }
Comments