【发布时间】: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