Dav*_*tka 294

单独留下关于何时(如果有的话)应该做的任何争论,@ functions是你如何做到的.

@functions {

    // Add code here.

}
Run Code Online (Sandbox Code Playgroud)

  • +1谢谢,FYI称之为实用性.MVC并不是城里唯一的游戏.有些人喜欢简单的剃须刀和URLRewrite作为MVC,为IMO带来的好处很多 (15认同)
  • `@ functions`是组织*查看特定*生成代码的好地方.例证:那些丑陋的客户模板 - 来自字符串.. (5认同)

Dar*_*rov 187

你的意思是内联助手?

@helper SayHello(string name)
{
    <div>Hello @name</div>
}

@SayHello("John")
Run Code Online (Sandbox Code Playgroud)

  • 我想定义一个不返回MvcHtmlString但是返回C#类型的方法. (4认同)
  • @Rookian,为什么你需要在视图中编写C#代码?我的意思是在视图中编写方法是错误的!你可以完美地在你所属的任何地方编写你的C#代码,然后在Razor视图中调用该方法,而这正是HTML帮助程序所做的.并且它们不应该总是返回MvcHtmlString. (4认同)
  • ASP.NET Core 似乎不再受支持。语法错误。 (3认同)
  • ASP.NET Core等价物是Tag Helper:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring (2认同)

gdm*_*hon 29

在剃刀内定义一个函数非常简单.

@functions {

    public static HtmlString OrderedList(IEnumerable<string> items)
    { }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以在任何地方调用该函数.喜欢

@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Run Code Online (Sandbox Code Playgroud)

但是,同样的工作也可以通过helper.举个例子

@helper OrderedList(IEnumerable<string> items){
    <ol>
        @foreach(var item in items){
            <li>@item</li>
        }
    </ol>
}
Run Code Online (Sandbox Code Playgroud)

那么区别是什么呢??根据之前的帖子,@ helpers和@functions共享一个共同点 - 它们使代码重用成为网页中的一种可能性.他们还有另一个共同点 - 乍一看它们看起来是一样的,这可能会对他们的角色产生一些混淆.但是,它们并不相同.本质上,帮助器是作为方法公开的可重用的Razor sytnax片段,用于将HTML呈现给浏览器,而函数是可以从Web页面应用程序中的任何位置调用的静态实用程序方法.帮助器的返回类型始终是HelperResult,而函数的返回类型是您想要的任何类型.

  • 通过省略 `@Functions` 前缀来调用函数,因为 `@OrderedList(...)` 在 .netcore 中对我有用。 (2认同)

Bok*_*kos 12

您也可以像这样使用Func

@{
    var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin));
}

<div style="@getStyle(50, 2)"></div>
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 10

剃刀只是一个模板引擎.

你应该创建一个普通的类.

如果要在Razor页面内创建方法,请将它们放在一个@functions块中.