Сделать простой 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);
}
}
1306   9  

9 ответов:

после обновления вы сделали,

  1. его первый вызов действия FirstAjax с запросом HttpGet по умолчанию и отображает пустое представление Html . (Раньше у вас этого не было)
  2. позже при загрузке элементов 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

    Ничего не найдено.