20

MVC3でのHtml.BeginFormの使用法は何ですか。フォームタグを直接追加できるのに、なぜそれを使用するのでしょうか。このhtmlヘルパーは、いくつかの機能を追加したり、単純なフォームタグでは実行できないことを実行したりします。

4

5 に答える 5

35

Html.BeginFormヘルパーメソッドには、ルーティングされたフォームの記述を容易にすることを目的としたいくつかのオーバーロードが含まれています。MVC構造を認識しており、コントローラーとアクションをターゲットにしていることを確認します。それはほんの少しの構文上の砂糖です:

<form method="post" action="@Url.Action(...)">

Microsoftの言葉で:

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

もちろん、誰もあなたにそれらを使わせているわけではありません。それは好みの問題です。実際、MVCの初期の頃、多くのWebForms開発者は、サーバー制御a-la <asp:TextBox>et al。からの新しい自由を祝い、すべてを手作業で書くことを主張していました。

フォームフィールドにヘルパーを使用することを強くお勧めします。ヘルパーはフォームの検証などを認識しているためです。Html.BeginFormフォームを開始および終了するための一貫した方法を提供するだけです。

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

Html.BeginFormオブジェクトを返し、 C#ステートメントIDisposableでラップできるようにします。using出口がusing出ると、処分はHtml.EndForm()自動的にあなたを呼びます。Html.EndForm返品なのでvoid、Razorから電話をかけるのは少し不便です。

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

単純な@Html.EndForm()ものはWrite(Html.EndForm()) -> Write(void)、つまりコンパイル時エラーになります。

于 2012-07-25T07:50:37.543 に答える
6

もちろん、手動でコーディングすることもできますが、次のようないくつかの利点があります。

  • 使い捨てのオブジェクトを返すので、それを句に入れることができusing、フォームタグが閉じられます
  • フォームアクションのURLを計算します
于 2012-07-25T07:50:48.833 に答える
4

単純な形ではできないことをする

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

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

于 2012-07-25T07:52:22.107 に答える
2

ヘルパーを持つ目的は何ですか?(レトリックの質問)すべての入力を手動で入力することもできますが、ヘルパー...まあ、時々あなたを助けます。

タグを付けるだけです。はい、手動で行うことも、もう少し凝ってこれを行うこともできます。

@using(Html.BeginForm())
{
}

これにより、フォームタグも閉じられます。したがって、すべての入力を曲線の括弧内に保持する場合は、フォームタグを閉じることを覚えておく必要はありません。

于 2012-07-25T07:52:29.503 に答える
0

すばらしい質問です。私はそれについて自分自身でかなり疑問に思いました。

私は間違っている可能性がありますが、これが私の推測です(より良い人が私を修正するかもしれません):

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

C#/ VBとhtmlの切り替えは構文的に難しいため、これらの境界を最小化する方向に進んでいました。

フォームを作成する場合、手動のhtmlを混在させることなく、フォーム全体を純粋にC#/ VB側で作成し、周囲のhtmlの世界との境界を1つにすることが有益であると考えられました。

そして、プログラマーは他の場所から物事を行うスタイルをコピーすることが多いため、かみそりの出現でその利点がなくなったとしても、それらのヘルパーを使用する慣行は続いています。

于 2014-11-05T09:26:58.043 に答える