System.Web.Mvc.HtmlHelper (hidden、checkbox、password、textbox) を使用してレンダリングできる HTML フォーム コントロールと、HTML で明示的に記述できない (file、submit) 必要がある理由を知っている人はいますか? この分離の原理は何ですか?
2 に答える
良い質問。
入力コントロール (入力、選択など) は Html ヘルパーでラップされているため、ユーザーが多くのコードを記述しなくても、TempData を介して独自の状態を維持できると思います。また、リンク コントロールとフォーム コントロールをラップして、それらのコントロールのコントローラー/アクションを指定する簡単で統一された方法を提供すると思います。他のほとんどのコントロールは、すぐに使用できる状態管理やコントローラー/アクション URL の構築を保証しません。
もちろん、好きなコントロール用に独自のラッパーを作成することを止めるものは何もありません。例えば、私が使用するいくつかのラッパーを次に示します。HTML ラベル コントロール用のラッパーを次に示します。
public static string Label(this HtmlHelper helper, string fieldName, string labelText)
{
var sb = new StringBuilder();
sb.Append("<label for=\"");
sb.Append(fieldName);
sb.Append("\">");
sb.Append(labelText);
sb.Append("</label>");
return sb.ToString();
}
そして、ラベルヘルパーとテキストボックスをラップして、ラベル付きの均一なテキスト入力フィールドを生成するために使用するものを次に示します。
public static string TextField(this HtmlHelper helper, string labelText, string fieldName, string value)
{
return string.Concat(
"<div>",
helper.Label(fieldName, labelText),
helper.TextBox(fieldName, value),
"</div>");
}
スレッド「Html.SubmitButton() missing in Preview4?」で Phil Haack の回答を見つけました。問題に関して:
ええ、私たちはヘルパーをいくらか最小限に抑えようとしています。それだけでなく、ヘルパーの多くが不要であるというフィードバックを何人かの人々から受け取りました。「私は HTML を知っていますが、なぜ SubmitButton ヘルパーが必要なのですか?」.
通常、入力ボタンはユーザー入力のレンダリングには使用されないため、ヘルパー メソッドの価値はわずかであると判断しました。結局、VS HTML エディターを使用すると、入力時にインテリセンスが得られます。どの属性が利用可能かを示します。私たちのヘルパーはそうではありません。
...
回避したいことは、すべての html 要素に対してヘルパーを用意することです。それは意味がありません: Html.Div.
ヘルパーの設計根拠を見つけたいと考えています。ユーザー入力を表示する要素だけでなく、すべての一般的なフォーム要素に 1 つあるかもしれません。その場合は、SubmitButton を含める可能性があります。
現在、私たちの論理的根拠は、ユーザー入力をレンダリングする一般的なフォーム ヘルパー、またはルーティング情報をレンダリングするヘルパーにはヘルパーがあるということです...