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