Razor函数:@helper和@functions有什么区别?

8

关于ASP.NET MVC中Razor功能的几个问题。

1)请查看以下代码:

@helper WelcomeMessage(string username)
{
    <p>Welcome, @username.</p>
}

然后您可以像这样调用它:@WelcomeMessage("John Smith")
@functions{
    public string GetSomeString(){
        return string.Empty;
    }
}

这里有两个Razor函数。一个使用@helper声明Razor函数,另一个使用@functions。那么告诉我@helper和@functions之间的区别是什么?

2)我们能否在.cs代码中声明Razor函数...如果可以,那么我们需要遵循任何惯例吗?

3)我们能从Razor函数返回整数吗?

@helper Calculator(int a, int b)
{
    @{
        var sum = a + b;
    }
    <b>@sum</b>
}

@Calculator(1, 2)

我们可以将sum返回给它的调用环境吗?
2个回答

12

两者都是为了可重用性而存在。

但是@functions主要用于仅需要进行一些计算或业务逻辑的情况,不需要返回任何HTML代码,我们需要编写纯粹的C#代码

对于@functions,我们可以在视图中不返回HTML时使用它们。如果我们想从@functions中返回HTML,则需要明确返回HtmlString而不是String。对于@functions,如果我们想返回HtmlString,还需要指定并包含相应的命名空间,例如:

@using System.Web.Mvc;
@functions {

   public static HtmlString WelcomeMessage(string username)
   {

       return new HtmlString($"<p>Welcome, {username}.</p>");
   }
}

@helper 在需要使用 Razor 代码创建 HTML 并根据某些逻辑呈现它时非常有用。

对于 @helper,当我们定义的方法需要与 HTML 混合并且我们想要返回一些 HTML 时,它们就会被使用。

@helper{

   public WelcomeMessage(string username)
   {

       <p>Welcome, @username.</p>;
   }
}

请阅读以下优秀文章,其中详细解释了两者之间的区别:

https://www.mikesdotnetting.com/article/173/the-difference-between-helpers-and-functions-in-webmatrix


你应该包含一个帮助器的示例以进行对比。 - Ashley Medway
@AshleyMedway 在问题中提到了这一点,所以我想跳过它,但我会添加上的。 - Ehsan Sajjad
1
那个 @helper 的例子似乎不是有效的 Razor 代码,至少在 Asp.Net MVC 上不是。 - Daniel Santos

2
您可以将帮助代码作为外部HTML助手放置在某些静态助手类中的CS文件中:
public static class ExternalHelper
{
    public static MvcHtmlString Sum(this HtmlHelper htmlHelper, int[] items)
    {
        return new MvcHtmlString(items.ToArray<int>().Sum().ToString());
    }
}

并在视图中使用它

@Html.Sum(new int[] { 1, 3,7 })

编辑:不要忘记将静态辅助类的命名空间放在 Views/Web.config 部分下。
<add namespace="ProjectNamespace.Helpers" />

1
答案与他的第二个问题相关,作为可行的替代方案。至少,我想知道。 - Zoran Bosnjak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接