De ce nu folosiți Html.EditorForModel() (Programare, C#, Asp.Net Mvc 3, Html Helper)

VinnyG a intrebat.

Ok, tocmai am descoperit despre EditorForModel în MVC și vreau să știu când ar trebui să folosesc acest lucru în loc de un EditorFor pe fiecare dintre proprietățile mele? Și de ce atunci când adaug o vizualizare puternic tipizată nu folosește this și construiește un an EditorFor pe fiecare proprietate?

Am întârziat cu asta… dar mulțumesc pentru informații!

Comentarii

  • Vă rugăm să aruncați o privire la articolul lui Brad Wilson de pe blogul lui Bradson –  > Por Muhammad Adeel Zahid.
3 răspunsuri
Carrie Kendall

Din moment ce răspunsul acceptat este un răspuns numai cu link (și a fost eliminat), m-am gândit să răspund de fapt la întrebarea derivată din blogul lui Brad Wilson: Șabloane ASP.NET MVC 2, Partea 1: Introducere.

Expresiile de model sunt simple ajutoare care operează asupra modelului curent. Linia DisplayForModel() este echivalentă cu DisplayFor(model => model).

TL;DR aceeași idee poate fi presupusă și pentru EditorFor(model => model) și EditorForModel(); aceste metode ajutătoare realizează același lucru. EditorForModel() presupune că expresia modelului este @model care a fost transmisă la vizualizare.

Să luăm ca exemplu următoarele modele și vizualizări:

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)

Domenic

Ar trebui să o utilizați atunci când este posibil, dar uneori veți avea nevoie de personalizarea modelelor individuale de tip Html.EditorFor utilizări.

În ceea ce privește motivul pentru care șabloanele încorporate nu îl folosesc, asta se datorează în principal faptului că sunt prostești în general, dar și pentru că, dacă îmi amintesc bine, trebuie să înfășoare elementele (cum ar fi rândurile de tabel etc.) în jurul fiecărui Html.EditorFor.

LongChalk

@Html.EditorForModel() ?? Și renunțați la plăcerea de a vă scrie propria vizualizare? smile

În afară de distracție, a face acest lucru ca un obicei este destul de riscant. Luați în considerare următorul scenariu obișnuit – aveți o variabilă bool, să zicem IsMale, în baza de date, în tabelul de clienți. Evident, nu doriți versiunea implicită (IsMale cu o căsuță de bifat) – probabil că doriți ceva mai prietenos, să zicem un {select, Options …. , /select}, nu-i așa? Aici intervine cu adevărat vizualizarea. Aceasta este personalizarea. Fiecare vizualizare este un pic diferită. Aveți motorul RAZOR, exploatați-l la maximum! În vizualizarea dvs. puteți suprascrie orice, sau chiar să introduceți manual o întreagă bucată de cod HTML proprie.

Comentarii

  • EditorForModel() (fără argumente) va căuta EditorTemplates personalizate pe baza convenției. Această funcție nu are nimic de-a face cu ce șablon este utilizat. –  > Por Carrie Kendall.