MVC3路由问题(隐藏属性名称)

时间:2011-10-20 13:02:15

标签: asp.net-mvc-3 url-routing

HY! 我有这个控制器:

      public ViewResult Hotel(string hotelSupplierCode, bool displayAllRooms, bool resend)
    {
        HotelModel model;
        if (resend)
        {
            model = (HotelModel)Session["HotelDetails"];
            HotelManager.ResendHotel(model.Hotel.Id);
            model.Hotel.Status = 1;
        }
        else
        {
            model = HotelModel.GetGotel(hotelSupplierCode, displayAllRooms);
        }
        Session["HotelDetails"] = model;
        return View("Hotel", model);
    }

和这条路线:

 routes.MapRoute(
            "Hotel", // Route name
            "{controller}/{action}/{hotelSupplierCode}/{displayAllRooms}/{resend}", // URL with parameters
            new { controller = "Hotel", action = "Hotel", hotelSupplierCode = UrlParameter.Optional, displayAllRooms = UrlParameter.Optional, resend = UrlParameter.Optional }

问题在于,当我访问视图时,返回的URL就像这样:

http://localhost:49575/Hotel/Hotel?hotelSupplierCode=3711&displayAllRooms=False&resend=False

但我想要这样的东西:

http://localhost:49575/Hotel/Hotel/3711/False/False

那么如何隐藏属性名称?如果我手动设置第二个URL,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

尝试这样的路线

routes.MapRoute(
            "Hotel",
            "Hotel/Hotel/{hotelSupplierCode}/{displayAllRooms}/{resend}",
            new { controller = "Hotel", action = "Hotel" }, 
            new { hotelSupplierCode = @"\w+",displayAllRooms = @"\w+", resend= @"\w+"}
        );

答案 1 :(得分:0)

我怀疑您的问题是由于您的路线顺序造成的。路径必须按照从最具体到最一般的顺序排列,通常以新项目中定义的默认路径结束。

确保将酒店路线放在默认路线之前。