2009-06-17 114 views
0

我將從數據庫中驅動生成一些超鏈接。例如,我會去獲取關於項目的一些信息,然後根據該數據庫表(其中包含要生成的HTML字段的類型等信息)中的配置信息,我將從我在MVC中創建的自定義控件動態創建Html控件。如何在不使用助手的情況下指定操作

這讓我想起超鏈接。如果我必須爲某些產品在這裏或那裏動態生成超鏈接,那麼現在使用我的自定義控件動態生成的視圖上的產品下方的表單就是一個簡單的例子。如果您不打算使用Helper方法並且不能使用Helper方法(因爲您正在爲視圖動態創建這些字段),請如何在這些實例上指定控制器/操作,使用類似於或不會看到類似Html的內容。動作鏈接,因爲這些字段是在運行時動態生成的?我用

+0

你可以在這裏發佈你的視圖代碼(「這是動態生成的」)嗎? – 2009-06-17 20:39:04

回答

0

一種解決方案是創建一個包含所有這些信息,然後可以傳遞給一個輔助方法的包裝類:

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傳遞給方法的最佳方法。

相關問題