从url调用MVC JQuery而不执行任何操作

从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

我有一个localhost:51775/Book/Index/bookname页面,它可以正常工作。但我想要的是从url中删除索引,并使其显示为localhost:51775/Book/bookname,我可以按照我的要求创建页面链接,但这次jquery调用不起作用

我在routeconfig中添加了一条新路线,如下所示

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