2016年12月8日木曜日

ASP.NET MVC 10_HTMLヘルパー ~その1~

VisualStuidioCommunity2015/Fw4.5.2/C#


ASP.NET Web Formsではサーバーコントロールがありました。
ASP.NET MVCではサーバーコントロールにかわって、HTMLヘルパーを使用しコントロールをレンダリングします。

基本的なHTMLヘルパー

  • BeginForm / BeginRouteForm
  • EndForm
  • Label / LabelFor
  • TextBox / TextBoxFor
  • TextArea / TextAreaFor
  • Password / PasswordFor
  • Hidden/ HiddenFor
  • RadioButton/ RadioButtonFor
  • CheckBox/ CheckBoxFor
  • DropDownList/ DropDownListFor
  • ListBox / ListBoxFor
  • EnumDropDownListFor

HTMLフォームのレンダリング

BeginForm 、EndForm

BeginFormメソッドは<form>タグを生成します。
EndFormメソッドは</form>タグを生成します。
@Html.BegionForm()
    ・・・フォームの内容(省略)
@Html.EndForm()
BeginFormメソッドはusing構文を使用することもできます。
using構文を使用すると、ブロックの終了で</form>タグを生成します。
@using (Html.BegionForm())
{
    ・・・フォームの内容(省略)
}
BeginFormメソッドの引数をまったく指定しない場合、現在のアクションメソッドにPostします。
BeginFormメソッドにはいろいろなオーバーロードが用意されています。
主な引数を指定した場合の例です。
@{
    //アクション名
    string actionName = "Edit";
    //コントローラー名
    string controllerName = "HtmlHelper";
    //アクションメソッドへの引数
    object routeValues = new { id ="1",otherParam ="xxx"};
    //HTTPメソッド(GET/POST)
    FormMethod frmMethod = FormMethod.Post;
}
   
@using (Html.BeginForm(actionName, controllerName, routeValues, frmMethod))
{
    ・・・フォームの内容(省略)
}
「<form action="/helper/HtmlHelper/Edit/1?otherParam=xxx" method="post">」と生成されます。


BeginRouteForm

BeginRouteFormメソッドを指定すると、ルート定義ファイルで設定されているルート名へ送信するフォームを生成できます。
ルート定義についてはコチラ ASP.NET MVC 04_ルーティングの基礎

ルート定義ファイルの内容です。
App_Start/RouteConfig.cs
routes.MapRoute(
    name: "HtmlHelper",
    url: "helper/sample/{controller}/{action}/{id}",
    defaults: new { controller = "HtmlHelperSample", action = "Edit", id = UrlParameter.Optional }
);
以下の例では、ルート名「HtmlHelper」、コントローラー「現在のコントローラー名」、アクション「現在のアクションメソッド名」に送信されるformタグが生成されます。
ルート定義のデフォルトコントローラーのデフォルトアクションではありません。
現在HelloControllerのWorldアクションを実行していれば、
「<form action="/helper/sample/Hello/World" method="post">」と生成されます。
@using (Html.BegionRouteForm("HtmlHelper"))
{
    ・・・フォームの内容(省略)
]

コントローラ名やアクションを指定する場合、匿名型のオブジェクトとして指定します。
@{ 
    //ルート名
    string routeName = "HtmlHelperSample";
    //ルートパラメータ
    object routeValues = new
    {
        Controller = "HtmlHelperSample",
        Action = "Edit",
        id = 1,
        otherParam = "xxx"
    };
    //HTTPメソッド(GET/POST)
    FormMethod frmMethod = FormMethod.Post;
}

@using (Html.BeginRouteForm(routeName, routeValues, frmMethod))
{
    ・・・フォームの内容(省略)
}
「<form action="/helper/sample/HtmlHelperSample/Edit/1?otherParam=xxx" method="post"> 」と生成されます。

0 件のコメント: