在 asp.net mvc 中对 controller 进行简单的 Ajax 调用

我正试图开始使用 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”即可。警报没有响。

更新

我修改了我的控制器如下,它开始工作。我不知道为什么现在还能用。有人能解释一下吗。参数“ a”与我添加它无关,因为我不能添加两个具有相同方法名和参数的方法。我认为这可能不是解决方案,但它的工作

public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}


[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
497445 次浏览

删除 data 属性,因为您对服务器来说不是 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: serviceURL, 使用

url: '<%= serviceURL%>',

and are you passing 2 parameters to successFunc?

function successFunc(data)
{
alert(data);
}

在 global.asax 中添加“ JsonValueProviderFactory”:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}

在您完成更新之后,

  1. 它首先使用默认的 HttpGet 请求调用 FirstAjax 操作 并呈现空白的 Html 视图
  2. 稍后在加载该视图的 DOM 元素时,将触发 Ajax 调用并显示警报。

之前您只是将 JSON 返回到浏览器,而没有呈现任何 HTML。现在它呈现了一个 HTML 视图,可以在其中获取 JSON 数据。

您不能直接呈现 JSON 的纯数据而不是 HTML。

这是你的更新问题。

因为不能有两个具有相同名称和签名的方法,所以必须使用 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>

使用 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'); }
});

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);
}

如果您只需要在 Ajax 调用中点击 C # Method,那么只需要传递两个 matter type 和 url,如果您的请求是 get,那么只需要指定 url。请按照下面的代码操作,一切正常。

C # 代码:

    [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 脚本代码,如果发送请求,也[ HttpGet ]到[ HttpPost ]

        $.ajax({
url: 'home/FirstAjax',
type:'POST',
success: function(responce){ alert(responce)},
error: function(responce){ alert(responce)}
});

注意: 如果你在同一个控制器中使用 FirstAjax,那么就不需要在 URL 中使用控制器名称。就像 url: 'FirstAjax',