web-dev-qa-db-ja.com

Html.EditorForModel()を使用しないのはなぜですか

さて、MVCのEditorForModelについて発見したばかりで、各プロパティでEditorForの代わりにこれをいつ使用する必要があるのか​​知りたいですか?そして、強く型付けされたビューを追加するときに、これを使用せず、すべてのプロパティにEditorForを構築するのはなぜですか?

私はこれに遅れています...しかし、情報をありがとう!

28
VinnyG

受け入れられた回答はリンクのみの回答であり(そして削除されました)、私は実際に Brad Wilson のブログから派生した質問に答えると思いました: ASP.NET MVC 2テンプレート、パート1:はじめに

モデル式は、現在のモデルを操作する単純なヘルパーです。行DisplayForModel()はDisplayFor(model => model)と同等です。

TL; DREditorFor(model => model)EditorForModel()についても同じ考え方が成り立ちます。これらのヘルパーメソッドは同じことを実現します。 EditorForModel()は、モデル式が@modelビューに渡されました。

次のモデルと例を見てください。

public class Person
{
    public string Name {get; set;}
    public Address MailingAddress {get; set;}
}

public class Address
{
    public String Street {get; set;}
    public String City {get; set;}
    public String State {get; set;}
}

Create.cshtml

@model MyNamespace.Models.Person

/* So, you need an Editor for the Person model? */
@Html.EditorForModel()
/*the above is equivalent to @Html.EditorFor(model => model) */

/* you need to specify the Address property that the editor accepts? */
@Html.EditorFor(model => model.MailingAddress)
22
Carrie Kendall

可能な限り使用する必要がありますが、場合によっては、個々のHtml.EditorForをカスタマイズする必要があります。

ビルトインテンプレートがそれを使用しない理由については、それは主にそれらが一般的にばかげているからですが、私が思い出すと、それらは各Html.EditorForの周りに要素(テーブル行など)をラップする必要があるためです。

3
Domenic

@ Html.EditorForModel()??そして、あなた自身の見解を書く面白さをあきらめますか? 笑顔

楽しいことに加えて、習慣としてそうすることはかなり危険です。次の一般的なシナリオを考えてみます。顧客テーブルのデータベースにIsMaleと言うブール変数があります。もちろん、デフォルトのバージョン(チェックボックス付きのIsMale)は必要ありません。おそらく、{select、Options ....、/ select}タグなど、もう少し親しみやすいものを望んでいますね。ここで、ビューが実際に動き始めます。それがカスタマイズです。すべてのビューは少し異なります。あなたはRAZORエンジンを持っています、それを最大限に活用してください!ビューでは、何かをオーバーライドしたり、独自のHTMLコードのチャンク全体を手動で入力したりすることもできます。

0
LongChalk