我在我的应用程序中的Index razor上有这个jquery ajax get方法:
$.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();
});
这会在api / project控制器中调用一个返回字符串列表的方法:
[HttpGet]
public List<string> SubmitProjectForPreapproval(int projectId)
{ ... }
我想要做的是将其转换为ajax post方法。在一天中的大部分时间里,我一直在努力做到这一点。我的问题是,为了实现这一目标,需要改变的是什么?例如 - 将方法的属性更改为[HttpPost]
,如何将路由值发送给它? (int pojectId)
编辑:如果我这样做,它可以出于某种原因:
public List<string> SubmitProjectForPreapproval(/*int projectId*/)
{
int projectId = 3308;
...
}
如果我在那里有参数,不知道为什么它找不到我的方法。
答案 0 :(得分:2)
我不确定 @Url 的内容如何与您的系统格式化 - 但只是将其更改为:
$.ajax({
url: "@Url.Action("SubmitProjectForPreapproval", "api/Project")",
type: "POST",
cache: false,
data: { projectId: "@ViewContext.RouteData.Values["ProjectId"]" }
}).done(function (data) {
如果你咬了一下:
@Url.Action("SubmitProjectForPreapproval
..其中有任何?xxx值,你还需要将它们添加到data: { ... }
答案 1 :(得分:0)
问题确实是我将数据发送到控制器操作的方式。我通过执行以下操作来修复它:
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);
...
}