2014-12-03 55 views
0

我正在尋找一種方法來定義全局函數,以便我可以在多個視圖之間共享實現。MVC中的全局函數5

我想知道我會把它們放在哪裏?我試過_viewStart.cshtml和/Share/_Layout.cshtml,但似乎不起作用。

我不想創建HtmlHelper類的擴展。在我的情況下,擴展名不起作用。我討厭繼續在多個視圖中複製相同的功能。

@functions { 
    public static string GetColumnHeader(string columnName, string columnHeader, ISupportGridViewModel model) 
    { 
    return string.Format("{0} {1}", columnHeader, model.Sort == columnName ? model.SortDir == "ASC" ? "▲" : "▼" : string.Empty); 
    } 
} 

對於那些評論說我應該使用擴展。這裏是我無法實現它的例子。據我所知,Razor助手只不過是擴展方法而已,它不起作用。

這裏是工作

var grid = new WebGrid(this.Model.Data); 
    grid.Pager(WebGridPagerModes.Numeric); 
    @grid.GetHtml(tableStyle: "table grid", 
        columns: grid.Columns(
        grid.Column(columnName: "Time", format: (item) => MethodDefinedInView(item.EndTime)) 
)) 

這裏是行不通的例子

+0

爲什麼不能擴展工作?這看起來是一個很好的候選人的擴展。 – 2014-12-03 01:43:32

+0

是什麼讓你覺得_extensions不會工作_? – 2014-12-03 01:43:50

+0

我使用MVC webgrid,當你想傳遞一個擴展名(Func <動態,對象>格式)時,它失敗。它不喜歡這裏的擴展。 所以,我能夠通過調用一個函數來解決它的唯一方法。 – Sam 2014-12-03 01:46:21

回答

2

只需創建一個靜態方法的例子...

var grid = new WebGrid(this.Model.Data); 
grid.Pager(WebGridPagerModes.Numeric); 
@grid.GetHtml(tableStyle: "table grid", 
       columns: grid.Columns(
       grid.Column(columnName: "Time", format: (item) => Html.ExtensionMethod(item.EndTime)) 

))公用事業類。您可以通過在Views文件夾內的Web.config中添加對名稱空間的引用,或者在每個cshtml文件的頂部添加對引用的訪問權限。