你可以寫一個自定義路線:
public class BlogRoute : Route
{
public BlogRoute()
: base(
"blog/{*info}",
new RouteValueDictionary(new
{
controller = "blog",
action = "index"
}),
new MvcRouteHandler()
)
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
if (rd == null)
{
return null;
}
var info = rd.Values["info"] as string;
if (string.IsNullOrEmpty(info))
{
return rd;
}
var parts = info.Split('/');
if (parts.Length < 1)
{
return rd;
}
for (int i = 0; i < parts.Length; i++)
{
if (i == parts.Length - 1)
{
int page;
if (int.TryParse(parts[i], out page))
{
rd.Values["page"] = page;
}
}
if (!rd.Values.ContainsKey("page"))
{
rd.Values[string.Format("tags[{0}]", i)] = parts[i];
}
}
return rd;
}
}
將在Global.asax
註冊:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("BlogRoute", new BlogRoute());
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
,然後你可以有一個BlogController:
public class BlogController : Controller
{
public ActionResult Index(string[] tags, int? page)
{
...
}
}
這看起來像我一直在尋找的東西,現在我忙於實現一些不同的東西,但只要我有時間嘗試實施此方法。非常感謝你的幫助:) – DerDee 2012-02-17 10:09:51