一種解決方案是創建一個包含所有這些信息,然後可以傳遞給一個輔助方法的包裝類:
public class RouteWrapper
{
public string RouteName { get; set; }
public object RouteValues { get; set; }
public string LinkText { get; set; }
/* Other Properties pertaining to your data */
}
在你將不得不定義RouteName方法包裝,和RouteValues屬性。或者,如果您只需要在控制器和操作之間進行更改,您可以通過這種方式進行設置。儘管您可以只傳遞RouteValues中的控制器和操作,並指定「Default」作爲RouteName。
這樣,你會真正能夠做什麼,你需要straigt視圖(假設RouteWrapper類是模型,語法可能稍有偏差,但你的想法):
<%= Html.RouteLink(Model.LinkText, Model.RouteName, Model.RouteValues) %>
希望這有助於。
編輯:
只是重新閱讀,看到你不使用的幫手。
無論您在何處生成錨標記,都可以將LinkText屬性用於內部HTML,並且Routing類中有一個方法可幫助您根據路由名稱和路由值生成URL。一旦我弄清楚它會如何發展,我會稍微發佈一些代碼。
再次編輯:
OK,所以這將是產生錨標記的一般方法:
public string GenerateAnchorTag(ViewContext context, RouteWrapper model)
{
string url = RouteTable.Routes.GetVirtualPath(context, model.RouteName, new RouteValueDictionary(model.RouteValues));
return String.Format("<a href=\"{0}\">{1}</a>", url, model.LinkText);
}
這就是我想嘗試(您需要包括System.Web.Routing,也許System.Web.Mvc)。 對於上下文,您需要以某種方式獲取請求上下文。我通常在輔助擴展中這樣做,所以輔助變量已經有一個我可以傳遞的上下文。如果你不使用助手,你必須找出將RequestContext傳遞給方法的最佳方法。
你可以在這裏發佈你的視圖代碼(「這是動態生成的」)嗎? – 2009-06-17 20:39:04