MVC JQuery 来自 url 的调用,没有任何操作
MVC JQuery call from url without action
我有 localhost:51775/Book/Index/bookname 页面,它工作正常。但我想要的是从 url 中删除 Index 并使其显示为 localhost:51775/Book/bookname ,我可以按我的意愿做页面 link 但这次 jquery 调用不起作用。
我已将新路由添加到 routeconfig 作为
routes.MapRoute(
"Book",
"Book/{id}",
new { controller = "Book", action = "Index", id = RouteParameter.Optional }
);
Jquery 从这个 url 调用因为 http://localhost:51775/Book/bookname 不起作用;
var data = new FormData();
data.append("comment", comment);
data.append("id", id);
var ajaxRequest = $.ajax({
type: "POST",
url: "/Book/AddBookComment",
contentType: false,
processData: false,
data: data
});
但是如果我删除 routeconfig 那么它会像 http://localhost:51775/Book/Index/bookname
这是从 jquery;
调用的 c# 方法
[HttpPost]
public string AddBookComment()
{
string comment = Request.Form["comment"];
string id = Request.Form["id"];
Int64 idBook = id.ToInt64();
SuggestBusiness.Instance.AddBookComment(idBook, SessionManager.GetSession().CurrentMember.MemberId, comment);
return "ok";
}
localhost:51775/Book/Index/bookname 是工作页面 link,localhost:51775/Book/bookname 是我想要的页面 link工作,localhost:51775/Book/AddBookComment 是 jquery
的 c# 方法
我应该怎么做才能拨打 jquery 电话?
url 根据区域、视图文件夹等而变化。更好的做法是使用 url 操作创建 url,将该值设置为一个变量并使用它ajax 调用中的变量值而不是硬编码。请参阅下面的示例
var url ='@Url.Action("YourMethod", "ControllerName")';
var ajaxRequest = $.ajax({
type: "POST",
url: url,
contentType: false,
processData: false,
data: data
});
@Url.Action
在外部脚本中不起作用,因此如果您使用外部脚本,则必须在视图中设置 url。
问题是您的默认路由操作是 index
,因此您无法调用 AddBookComment
方法。尝试将您的默认路由操作更改为此
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = RouteParameter.Optional }
);
routes.MapRoute(
"Book",
"Book/{id}",
new { controller = "Book", action = "AddBookComment", id = RouteParameter.Optional }
);
Jquery
var url = '@Url.Action("AddBookComment","Book")'
var ajaxRequest = $.ajax({
type: "POST",
url: url,
contentType: false,
processData: false,
data: data
});
尝试使用以下代码注册您的路线。
routes.MapRoute(
"Book",
"{controller}/{action}/{id}",
new { controller = "Book", action = "Index", id = RouteParameter.Optional }
);
"{controller}/{action}/{id}"用来定义一个模板,让MVC理解路由,然后你给它一个默认实例。
因为你有一个带有 url: "Book/{id}"
的路由,这意味着在你的 ajax 调用中,url: "/Book/AddBookComment",
将匹配该路由并将你发送到 Index()
方法。删除路线或者您可以添加另一条特定路线(需要在您的 "Book"
路线之前)
routes.MapRoute(
"BookComment",
"Book/AddBookComment",
new { controller = "Book", action = "AddBookComment" }
);
.... // your other routes
我有 localhost:51775/Book/Index/bookname 页面,它工作正常。但我想要的是从 url 中删除 Index 并使其显示为 localhost:51775/Book/bookname ,我可以按我的意愿做页面 link 但这次 jquery 调用不起作用。
我已将新路由添加到 routeconfig 作为
routes.MapRoute(
"Book",
"Book/{id}",
new { controller = "Book", action = "Index", id = RouteParameter.Optional }
);
Jquery 从这个 url 调用因为 http://localhost:51775/Book/bookname 不起作用;
var data = new FormData();
data.append("comment", comment);
data.append("id", id);
var ajaxRequest = $.ajax({
type: "POST",
url: "/Book/AddBookComment",
contentType: false,
processData: false,
data: data
});
但是如果我删除 routeconfig 那么它会像 http://localhost:51775/Book/Index/bookname
这是从 jquery;
调用的 c# 方法[HttpPost]
public string AddBookComment()
{
string comment = Request.Form["comment"];
string id = Request.Form["id"];
Int64 idBook = id.ToInt64();
SuggestBusiness.Instance.AddBookComment(idBook, SessionManager.GetSession().CurrentMember.MemberId, comment);
return "ok";
}
localhost:51775/Book/Index/bookname 是工作页面 link,localhost:51775/Book/bookname 是我想要的页面 link工作,localhost:51775/Book/AddBookComment 是 jquery
的 c# 方法我应该怎么做才能拨打 jquery 电话?
url 根据区域、视图文件夹等而变化。更好的做法是使用 url 操作创建 url,将该值设置为一个变量并使用它ajax 调用中的变量值而不是硬编码。请参阅下面的示例
var url ='@Url.Action("YourMethod", "ControllerName")';
var ajaxRequest = $.ajax({
type: "POST",
url: url,
contentType: false,
processData: false,
data: data
});
@Url.Action
在外部脚本中不起作用,因此如果您使用外部脚本,则必须在视图中设置 url。
问题是您的默认路由操作是 index
,因此您无法调用 AddBookComment
方法。尝试将您的默认路由操作更改为此
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = RouteParameter.Optional }
);
routes.MapRoute(
"Book",
"Book/{id}",
new { controller = "Book", action = "AddBookComment", id = RouteParameter.Optional }
);
Jquery
var url = '@Url.Action("AddBookComment","Book")'
var ajaxRequest = $.ajax({
type: "POST",
url: url,
contentType: false,
processData: false,
data: data
});
尝试使用以下代码注册您的路线。
routes.MapRoute(
"Book",
"{controller}/{action}/{id}",
new { controller = "Book", action = "Index", id = RouteParameter.Optional }
);
"{controller}/{action}/{id}"用来定义一个模板,让MVC理解路由,然后你给它一个默认实例。
因为你有一个带有 url: "Book/{id}"
的路由,这意味着在你的 ajax 调用中,url: "/Book/AddBookComment",
将匹配该路由并将你发送到 Index()
方法。删除路线或者您可以添加另一条特定路线(需要在您的 "Book"
路线之前)
routes.MapRoute(
"BookComment",
"Book/AddBookComment",
new { controller = "Book", action = "AddBookComment" }
);
.... // your other routes