したがって、ヘルパーを定義する方法は少なくとも2つあります。これが1つの方法です。
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ビューでこれら2つのタイプのヘルパーを参照する方法です。
@{
ViewBag.Title = "Home";
}
@using MvcHelpers.Helpers;
<h2>Home Page</h2>
@ButtonHelper.SpecialButton("button1")
<br />
@Html.SpecialButton("button2")
どちらの手法でも、まったく同じ結果が得られます。Html.SpecialButtonとして参照されるのは、拡張メソッドです。これに対する唯一の利点は、それがHTMLヘルパーであり、他の関数を実行していないことは明らかであるということです。HTMLヘルパーの使用に精通している人は、InteliSenseを使用すると新しい関数が表示されるようになります。ただし、表示するには、適切なuses句を入力する必要があります。したがって、セマンティクスがわずかに異なる同じ結果になります。