1、页面内 @helper(仅当前cshtml页面可用)
在Razor视图页面内部定义辅助方法,只能在当前页面调用,不能跨页面复用。
@helper LinkStr(string who, string where)
{
var res = who + "在" + where;
@res
}
<!-- 调用 -->
<p>@LinkStr("Tom","LonDon")</p>Code language: HTML, XML (xml)
输出:
<p>Tom在LonDon</p>
缺点:只能当前页面使用,其他视图无法调用。
2、自定义HtmlHelper扩展方法(全局,所有页面都能用)
写独立C#类,做扩展方法,整个MVC项目所有Razor页面都可以通过Html.xxx()调用。
①新建类 CustomHelper.cs
using System.Web.Mvc;
namespace System.Web.Mvc.Html
{
public static class CustomHelper
{
//示例1 返回普通字符串
public static string Linkd(this HtmlHelper htmlHelper, string who, string where)
{
return who + "在" + where;
}
//示例2 返回Html标签,要用MvcHtmlString,防止html被转义
public static MvcHtmlString Linkd(this HtmlHelper htmlHelper, string text, string url)
{
return new MvcHtmlString(string.Format("<a href='{0}'>{1}</a>", url, text));
}
}
}Code language: JavaScript (javascript)
关键点:
- 命名空间放到
System.Web.Mvc.Html,页面不用额外using- 方法参数第一个:
this HtmlHelper htmlHelper标记这是Html扩展方法- 返回html标签要返回
MvcHtmlString,不然<a>标签会被转义成文本
②视图页面调用
@Html.Linkd("Jack","HongKong")
@Html.Linkd("Google","https://www.foxdevelop.com")Code language: JavaScript (javascript)
两者对比
| 方式 | 定义位置 | 调用方式 | 作用范围 |
|---|---|---|---|
@helper | cshtml视图内部 | @方法名() | 仅限当前页面,不能跨页面 |
| Html扩展方法 | 独立C#类 | @Html.方法名() | 全局所有视图,推荐项目公用逻辑 |
注意:.NET Core / .NET5+ Razor 已经移除了
@helper语法,只支持扩展方法。@helper只存在老的ASP.NET MVC5。
Previous: 布局 Page 和 Section
Next: Razor 条件 / 循环输出