2012-07-25 15 views
19

MVC3でのHtml.BeginFormの使用方法は何ですか? なぜフォームタグを直接追加できるのか、このHTMLヘルパーは機能を追加するのか、単純なフォームタグではできないことをするのでしょうか。MVC3でのHtml.BeginFormの使用方法

答えて

29

Html.BeginFormヘルパーメソッドには、couple overloadsが含まれています。この目的は、ルーティングされたフォームの書き出しを容易にすることです。 MVCの構造を認識し、コントローラとアクションをターゲットにしていることを確認します。

Microsoftの言葉で
<form method="post" action="@Url.Action(...)"> 

::それ以上構文糖のほんの少しだ

ASP.NET MVCフレームワークはビューでHTMLをレンダリングする簡単な方法を提供するヘルパーメソッドが含まれています。

もちろん、誰もあなたを使用させていません。それは好みの問題です。実際、MVCの初期には、多くのWebForms開発者がサーバーコントロールから新しい自由を祝いました。<asp:TextBox>など、手作業ですべてを書くことを主張していました。

フォームフィールドのヘルパーを使用することは、フォームの検証などのことを認識していることを強くお勧めします。 Html.BeginFormはちょうどあなたのフォームを起動して終了する一貫した方法を提供します:

@using(Html.BeginForm()) 
{ 
    @Html.LabelFor(...) 
    @Html.EditorFor(...) 
} 

Html.BeginFormは、あなたがC#using文でそれをラップすることができ、IDisposableオブジェクトを返します。 usingが終了すると、自動的にHtml.EndForm()が処理されます。 Html.EndForm戻りvoidのでカミソリから呼び出すことが少し不便です:

@Html.BeginForm() 
<formStuff> 
@{Html.EndForm();} 

シンプル@Html.EndForm()はすなわち、時間のコンパイルエラー、Write(Html.EndForm()) -> Write(void)になります。

あなたが手でそれをコーディングすることができますが、それはのようないくつかの利点、持っていないもちろん
+0

ここで意味するのは、IDisposableオブジェクトをラップするasp.netのconstructを使用することですか? – Charu

+0

私は答えに段落を追加しました。 – Kivin

4

:あなたはusing句でそれを置くことができ、それがするように、それは、使い捨てであるオブジェクトを返します

  • を以下のためにformタグを閉じます、それは
4

フォームアクション用のURLを計算し、単純な形で行うことができない何かを

  • 最後に、ヘルパーメソッドの呼び出しはすべて純粋なHTMLに変換されるため、Html.BeginFormが行うことはできません。<form>タグを直接使用して行うことはできません。

    Html.BeginFormは純粋にヘルパーメソッドです。

    2

    ヘルパーをまったく持つ目的は何ですか? (修辞的な質問)あなたは手動でもすべての入力をタイプすることができますが、ヘルパー...まあ、時々助けてください。

    すべてタグを付けます。はい、あなたは手動で行うこともできますし、もう少し空想することができ、次の操作を行います。

    @using(Html.BeginForm()) 
    { 
    } 
    

    これは、同様にあなたのためのformタグを閉じます。したがって、すべての入力を括弧の中に入れておけば、フォームタグを閉じるのを心配する必要はありません。

    +1

    ご質問は*役に立つと助かります。タグを閉じることを忘れることは、中括弧を閉じることを忘れることと同じくらい可能性があります - その点は何ですか? – John

    0

    優秀な質問、私はそれについてかなり疑問に思った。

    私は間違っているかもしれないが、ここに私の推測では、(より良い男が私を補正してもよい)です。

    MVCの初期の頃は、何のかみそりはありませんでした。

    C#/ VBとhtmlを切り替えるのは構文が賢明ではなかったので、それらの境界を最小限に抑えるようにプッシュがありました。

    フォームを作成するときに、純粋にC#/ VB側で完全なフォームを手動で作成することなく、HTMLの周囲の世界に1つの境界線を持たせることが有益でした。

    プログラマーは、しばしば、他の場所から物事を行うスタイルをコピーするので、それらのヘルパーを使用する実践は、かみそりの出現によってその利益が消えても、持続しています。

    関連する問題