MVC 5中的全局功能

时间:2014-12-03 01:41:34

标签: asp.net-mvc

我正在寻找一种可以定义全局函数的方法,以便我可以跨多个视图共享实现。

我想知道我会把它放在哪里?我尝试了_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))
  ))

这是一个不起作用的例子......

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))

))

1 个答案:

答案 0 :(得分:2)

只需在Utilities类中创建一个静态方法即可。您可以通过在Views文件夹内的Web.config中添加对命名空间的引用,或者只是在每个cshtml文件的顶部,在视图中访问它。