嗨女士们先生们,
我是来自 Java 的 Razor 新手。我对助手的角色有点困惑。它们与定义做同样事情的 C# 类有何不同?你什么时候会使用帮助器来创建一个类并调用该类的方法?
也许,作为参考,可以使用这个例子。
也许为了完成,在编写 Web 应用程序时,Helper 和客户端 Javascript 将如何结合在一起?看起来他们会重叠很多?
最好的,
乔治斯
嗨女士们先生们,
我是来自 Java 的 Razor 新手。我对助手的角色有点困惑。它们与定义做同样事情的 C# 类有何不同?你什么时候会使用帮助器来创建一个类并调用该类的方法?
也许,作为参考,可以使用这个例子。
也许为了完成,在编写 Web 应用程序时,Helper 和客户端 Javascript 将如何结合在一起?看起来他们会重叠很多?
最好的,
乔治斯
所以至少有两种方法可以定义助手。这是一种方法。
namespace MvcHelpers.Helpers
{
public class ButtonHelper
{
public static MvcHtmlString SpecialButton(string id)
{
return new MvcHtmlString(String.Format("<input id=\"{0}\" type=\"button\" value=\"Special\"/>", id));
}
}
}
我认为这就是您在说“C# 类”时所指的内容,但实际上它们只是帮助器,也可以更轻松地输出将在您的视图中呈现的 HTML。
这是另一种设计助手的方法,这可能就是您所说的“助手”。
namespace MvcHelpers.Helpers
{
public static class ButtonHelperExtension
{
public static MvcHtmlString SpecialButton(this HtmlHelper helper, string id)
{
return new MvcHtmlString(String.Format("<input id=\"{0}\" type=\"button\" value=\"Special\"/>", id));
}
}
}
这被称为帮助程序扩展,现在我们可以像所有其他标准 HTML 帮助程序一样引用它。下面是我们如何在 Razor 视图中引用这两种类型的助手。
@{
ViewBag.Title = "Home";
}
@using MvcHelpers.Helpers;
<h2>Home Page</h2>
@ButtonHelper.SpecialButton("button1")
<br />
@Html.SpecialButton("button2")
两种技术都达到了完全相同的结果。引用为 Html.SpecialButton 的是扩展方法。我看到的唯一优点是很明显它是一个 HTML 帮助程序,而不是执行其他一些功能。熟悉使用 HTML 帮助程序的人现在在使用 InteliSense 时会看到您的新函数。但是他们仍然必须输入正确的使用条款才能显示出来。因此,语义略有不同的结果相同。