0

我写了下面的代码

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "Home", // Route name
            "", // URL with parameters
            new { controller = "Home", action = "Index" } // Parameter defaults
        );
        routes.MapRoute(
                   "Controller_Action", // Route name
                   "{controller}/{action}/{id}", // URL with parameters
                   new { id = UrlParameter.Optional } // Parameter defaults
        );
        foreach (var route in GetDefaultRoutes())
        {
            routes.Add(route);
        }
        routes.MapRoute(
            "UserPage", // Route name
            "{id}", // URL with parameters
            new { controller = "Home", action = "Get" } // Parameter defaults
        );
    }




    private static IEnumerable<Route> GetDefaultRoutes()
    {
        //My controllers assembly (can be get also by name)
        Assembly assembly = typeof(test1.Controllers.HomeController).Assembly;
        // get all the controllers that are public and not abstract
        var types = assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(Controller)) && t.IsPublic && !t.IsAbstract);
        // run for each controller type
        foreach (var type in types)
        {

            //Get the controller name - each controller should end with the word Controller
            string controller = type.Name.Substring(0, type.Name.IndexOf("Controller"));
            // create the default
            RouteValueDictionary routeDictionary = new RouteValueDictionary
                                               {
                                                   {"controller", controller}, // the controller name
                                                   {"action", "index"} // the default method
                                               };
            yield return new Route(controller, routeDictionary, new MvcRouteHandler());
        }
    }

我是 mvc 的新手,我想像这样重写我的 url,假设我的 url 就像 www.myhouse.com/product/index/1 那么我只想显示 www.myhouse.com/prduct-name 以获得更好的 seo性能,我正在使用 mvc4 beta,我也有一个通过.Net MVC 中的 URL 重写,但它不适合我....

但我不知道如何将值传递给这个方法。

4

1 回答 1

2

在互联网上搜索了很多之后,我得到了我的解决方案

将以下代码添加到global.asax

routes.MapRoute(
            "Home", // Route name
            "", // URL with parameters
            new { controller = "Home", action = "Index" } // Parameter defaults
        );
        routes.MapRoute(
           "jats", // Route name
           "{jats}", // URL with parameters
           new { controller = "Home", action = "Content" } // Parameter defaults
         );

然后添加以下代码以查看:

@Html.ActionLink("test", "Content", new { jats= "test-test" })

将以下代码添加到HomeController

public ActionResult Content(string jats)
{
    return View();
}

然后你就完成了...现在 URL 与您传入的查询字符串相同...因此您的控制器名称和查询字符串参数将不会显示。

于 2012-07-14T19:23:15.360 回答