【问题标题】:Global functions in MVC 5 [duplicate]MVC 5中的全局函数[重复]
【发布时间】:2014-12-03 01:41:33
【问题描述】:

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

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

))

【问题讨论】:

  • 为什么扩展不起作用?这看起来是一个很好的扩展候选人。
  • 是什么让您认为扩展不起作用
  • 我正在使用 MVC webgrid,当您想将扩展名作为( Func 格式)传递时,它失败了。它不喜欢这里的扩展。所以,我能够通过调用函数来解决它的唯一方法。
  • 如果你可以使用上面的函数,那么你当然可以创建一个 HtmlHelper 方法来做同样的事情——比如@Html.ColumnHeader(columnName, ....)
  • 也许你可以使用剃须刀助手,你可以在这里阅读它们weblogs.asp.net/scottgu/…。它还包括有关如何重用它们的信息。您的重用问题可能是您将函数设为静态。

标签: asp.net-mvc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2014-09-06
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多