【发布时间】:2017-10-06 22:05:04
【问题描述】:
我们正在移动我们的服务器端逻辑以通过 API 调用。我无法从我的 AJAX 调用中获得要执行的操作。谁能告诉我我的代码有什么问题以及为什么我收到一个错误说它无法在控制器中找到操作?
控制器动作
[System.Web.Http.HttpPost]
public HttpResponseMessage assignViews(string selectedViews, string volIds)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
AJAX 请求
self.saveViews = function () {
var data = {
selectedViews: self.selectedViews().toString(),
volIds: populateSelectedVolIds().toString()
};
var jsonData = ko.toJSON(data);
$.ajax({
url: "../../ja/ClientView/assignViews",
type: "POST",
contentType: "application/json; charset=utf-8",
cache: false,
data: jsonData,
success: handleViewsForClientSuccess,
error: handleEditViewsErrors
});
};
路由
public override void RegisterArea(AreaRegistrationContext context)
{
RouteTable.Routes.MapHttpRoute(
"ja",
"ja/{controller}/{id}",
new { action = "Index", id = UrlParameter.Optional, version = UrlParameter.Optional }
);
}
【问题讨论】:
-
[1] 您的 url 应该是“../../ja/ClientView”,所以不要包含 assignViews(操作名称),因为它不是您的路由的一部分。 [2] 最佳实践是使用模型而不是字符串作为参数。如果您使用模型,则绑定将正常工作。另一种选择是使用 [FromBody] 属性。
-
取消操作名称不起作用。我将尝试创建一个模型对象并将其设置为参数。希望这会奏效。
-
创建模型就像一种魅力。请将此作为答案,以便我接受。感谢您的帮助!
标签: c# .net ajax asp.net-mvc asp.net-web-api