从url调用MVC JQuery而不执行任何操作
我有一个localhost:51775/Book/Index/bookname页面,它可以正常工作。但我想要的是从url中删除索引,并使其显示为localhost:51775/Book/bookname,我可以按照我的要求创建页面链接,但这次jquery调用不起作用 我在routeconfig中添加了一条新路线,如下所示从url调用MVC JQuery而不执行任何操作,jquery,asp.net-mvc,routes,action,Jquery,Asp.net Mvc,Routes,Action,我有一个localhost:51775/Book/Index/bookname页面,它可以正常工作。但我想要的是从url中删除索引,并使其显示为localhost:51775/Book/bookname,我可以按照我的要求创建页面链接,但这次jquery调用不起作用 我在routeconfig中添加了一条新路线,如下所示 routes.MapRoute( "Book", "Book/{id}", new { controll
routes.MapRoute(
"Book",
"Book/{id}",
new { controller = "Book", action = "Index", id = RouteParameter.Optional }
);
来自此url的Jquery调用不起作用
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,那么它的工作原理是
这里是从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是工作页面链接,localhost:51775/Book/bookname是我希望它工作的页面链接,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。问题是默认路由操作是索引
,因此无法调用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”
路线之前)
是否在您的
RouteConfig
文件中路由第一个(即在默认路由之前)?是的,它是第一个。id参数只能是数字吗?然后显示您的Index()方法
方法。实际上,我不使用参数,我们可以忽略它,因为我从表单数据发送参数。如果我更改了您显示的默认路线,则项目不起作用。不,我的意思是保持默认路线不变,可以选择将此路线添加到路线表中。这次我编辑了我的答案,localhost:51775/Book/bookname链接不起作用!localhost:51775/Book/Index/bookname是工作页面链接,localhost:51775/Book/bookname是我希望它工作的页面链接,localhost:51775/Book/AddBookComment是jqueryok的c#方法抱歉,我犯了一个错误,将默认路由添加到路由集合的末尾。(简单地把最下面的书放到最上面)@kubilay我想你应该试试Gayan Ranasinghe的答案。您需要默认路由和自定义路由来满足您的需求。我已经有了这两种路由,正如我在问题中所写的,routeconfig正在为页面链接工作。但是jquery调用不起作用!我保留了书页和评论操作的两条路线,它是有效的,thx stephen
routes.MapRoute(
"BookComment",
"Book/AddBookComment",
new { controller = "Book", action = "AddBookComment" }
);
.... // your other routes