如何正确配置路由以允许多个帖子到同一个MVC控制器?

时间:2017-12-11 19:41:20

标签: asp.net-mvc knockout.js

我很难理解如何正确配置路由。我有一个MVC应用程序,在一个家庭控制器下我宁愿采取不同的后期行动。

    [HttpPost]
    [ActionName("Login")]
    public ActionResult Login(Login login, FormCollection formCollection)
    {
         return Json(true)
     }

    [HttpPost]
    [ActionName("Locations")]
    public ActionResult Locations(Login login, FormCollection formCollection)
    {
        return Json(true);
    }

在我看来,我有几个ajax帖子,我希望他们能够转到那些不同的行动结果。

           $.ajax({
                ur: '@Url.Action("Locations", "Home")',
                type: 'post',
                data: jsonData,
                contentType: 'application/json',
                success: function (result) {
                        });
                }
            });

           $.ajax({
                ur: '@Url.Action("Login", "Home")',
                type: 'post',
                data: jsonData,
                contentType: 'application/json',
                success: function (result) {
                        });
                }
            });

问题是,任何一个ajax帖子都会在“登录”操作下执行代码。这是我在routeconfig文件中的maproute,我认为问题出在这里。

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional }
        );

我不知道如何修改我的帖子的maproute以进行适当的操作。

谢谢。

2 个答案:

答案 0 :(得分:0)

这次对我有用的是指定对“[action] / [controller]”的显式绑定。像这样:

        routes.MapRoute(
            name: "ProcessLogin",
            url: "Home/ProcessLogin");

        routes.MapRoute(name: "Locations", url: "Home/Locations");

为了更加谨慎,只需将ProcessLogin与主要的Login视图/操作分离似乎运作良好。

答案 1 :(得分:0)

试试这个

[Route("home/login")]
[HttpPost]
public ActionResult Locations(Login login, FormCollection formCollection)
    {
        return Json(true);
    }

[Route("home/locations")]
[HttpPost]
public ActionResult Locations(Login login, FormCollection formCollection)
    {
        return Json(true);
    }

和,RouteConfig.cs:

   public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "SinglePage",
            url: "{Url}",
            defaults: new { Url = "/" }
            );
    }

并使用:

       $.ajax({
            ur: '../../../../../../../../../../home/login',
            type: 'post',
            data: jsonData,
            contentType: 'application/json',
            success: function (result) {
                    });
            }
        });
        $.ajax({
            ur: '../../../../../../../../../../home/locations',
            type: 'post',
            data: jsonData,
            contentType: 'application/json',
            success: function (result) {
                    });
            }
        });