是否有一種簡單的方法來覆蓋MVC爲我生成的鏈接,以便始終能夠處理另一個值。覆蓋MVC中生成的鏈接
例如http://www.site.com/ {控制器}/{動作}總是呈現爲http://www.site.com/ {控制器}/{行動} /鮑勃其中鮑勃是每個用戶特有的,並使用上漲到生成的每個鏈路的末端@ Html.ActionLink或@ Url.ActionLink。
我是否需要重寫每個方法或者是否存在其他地方我可以插入此邏輯?
是否有一種簡單的方法來覆蓋MVC爲我生成的鏈接,以便始終能夠處理另一個值。覆蓋MVC中生成的鏈接
例如http://www.site.com/ {控制器}/{動作}總是呈現爲http://www.site.com/ {控制器}/{行動} /鮑勃其中鮑勃是每個用戶特有的,並使用上漲到生成的每個鏈路的末端@ Html.ActionLink或@ Url.ActionLink。
我是否需要重寫每個方法或者是否存在其他地方我可以插入此邏輯?
這聽起來更像是你真的想要一個自定義的URL路由方案。這是大部分ActionLink重載中的「路由值」參數。您可以爲該方法提供值,這些值用於填充映射路由中的值。默認情況下,單一的路由具有附加到它,所以你的情況,你可以做到這一點「ID」的值:
@Html.ActionLink("link", "Home", "Index", new { id = "bob" })
,你會得到,看起來網址,如:
http://www.site.com/Home/Index/bob
如果你需要的ID參數,也可以在那裏,你可以任意添加新元素的路線圖,在Global.asax中的代碼隱藏:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{user}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
user = "guest",
id = UrlParameter.Optional
} // Parameter defaults
);
現在你可以使用任何如下:
@Html.ActionLink("link", "Home", "Index", new { id = 1 })
@Html.ActionLink("link", "Home", "Index", new { user = "bob" })
@Html.ActionLink("link", "Home", "Index", new { user = "bob", id = 1 })
而且你會得到,分別爲:
http://www.site.com/Home/Index/guest/1
http://www.site.com/Home/Index/bob
http://www.site.com/Home/Index/bob/1
MVC路由是非常強大的,但像最強大的東西,也很複雜。 This article給你一個很好的介紹。它是爲MVC的舊版本編寫的,但基本相同(只是將路由中的[]更改爲{})。
另外,如果您不想記住要將用戶參數添加到每個打電話,你可以創建自己的HtmlHelper或UrlHelper擴展方法來爲你做它:
public static MvcHtmlString MyActionLink (this HtmlHelper html, string text, string action, string controller, IDictionary<string, object> attrs)
{
var data = new { user = GetTheUser() };
return html.ActionLink(text, action, controller, data, attrs)
}
(根據需要添加額外的過載;只通過「空」的動作,控制器,數據等,如果你想使用默認值。)