Javascript 转换JQuery-ajax-GET-to-POST
我在应用程序的索引剃刀上有一个jquery ajax get方法:Javascript 转换JQuery-ajax-GET-to-POST,javascript,jquery,ajax,asp.net-mvc,razor,Javascript,Jquery,Ajax,Asp.net Mvc,Razor,我在应用程序的索引剃刀上有一个jquery ajax get方法: $.ajax({ url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")", type: "GET", cache: false, data: { projectId: "@ViewContext.RouteData.Values["ProjectId"]" } }).done(function (data) { v
$.ajax({
url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")",
type: "GET",
cache: false,
data: { projectId: "@ViewContext.RouteData.Values["ProjectId"]" }
}).done(function (data) {
var count = 0;
$.each(data, function (index, value) {
$("#ulMessages").append("<li>" + value + "</li>");
count++;
});
// Assume validation errors if more than 1 message
if (count > 1) {
$("#btnSubmit").removeAttr("disabled");
}
}).fail(function () {
$("#ulMessages").append("<li>An error occurred. Please try again later</li>");
$("#btnSubmit").removeAttr("disabled");
}).always(function () {
$("#imgAjaxLoader").hide();
});
不确定如果我在那里有参数,为什么它找不到我的方法。我不确定@Url内容如何与您的系统一起格式化-但只是将其更改为类似以下内容:
$.ajax({
url:“@url.Action”(“提交项目进行预批准”,“api/Project”)”,
类型:“POST”,
cache:false,
数据:{projectId:@ViewContext.RouteData.Values[“projectId”]“}
}).done(函数(数据){
如果你被咬了:
@Url.Action(“SubmitProjectForPreapproval
…实际上有任何?xxx值,您还需要将它们添加到
数据中:{…}
问题确实是我将数据发送到控制器操作的方式。我通过执行以下操作修复了它:
- 更改ajax方法(使用JSON.stringify):
- 添加一个类以获取此字符串化值:
- 更改控制器操作方法以接收此新对象并提取所需的值:
[HttpPost]
预批准的公共列表提交项目(ProjectDobject ProjectDobject)
{
int projectId=int.Parse(projectdobject.projectId);
...
}
为什么不在ajax中将类型更改为POST
从GET
call@dreamweiver:是的。这正是我想做的。我用上面的GET发布了工作版本。Andrew在这里是正确的,或者你也可以使用$.post方法,它是$.ajax type:post方法的缩写。基本上如果类型未指定ajax将使用GET so specify type:“POST”作为参数我已经发现使用Fiddler来发现实际的错误:我可能没有正确地传递路由值。它说“在与请求匹配的控制器项目
上找不到任何操作”。“如果我从控制器中的方法中取出参数,它将查找操作。例如:public List SubmitProjectForPreapproval()
[HttpGet]
public List<string> SubmitProjectForPreapproval(int projectId)
{ ... }
public List<string> SubmitProjectForPreapproval(/*int projectId*/)
{
int projectId = 3308;
...
}
var projectIdObject = {
ProjectId: "@ViewContext.RouteData.Values["ProjectId"]",
}
$.ajax({
url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")",
type: "POST",
cache: false,
data: JSON.stringify(projectIdObject),
contentType: 'application/json',
}).done(function (data) { ... }
public class ProjectIdObject
{
public string ProjectId { get; set; }
}
[HttpPost]
public List<string> SubmitProjectForPreapproval(ProjectIdObject projectIdObject)
{
int projectId = int.Parse(projectIdObject.ProjectId);
...
}