2 modele în 1 afișare

Știu că întrebarea mea este proastă, dar nu știu soluția problemei mele și pot înțelege întrebări similare cu privire la stackoverflow. Fac blog simplu. Și când mă duc la un post pe acest blog, trebuie să văd textul mesajului și comentariile pentru el. Ele sunt în baza mea de date, dar nu știu cum să afișeze ambele. Vă rog să mă ajutați

0

4 răspunsuri

Puteți crea un ViewModel personalizat pentru această vizualizare particulară. Ceva de genul:

public class BlogReaderViewModel
{
   //various fields which exist on either the post or the comments
}

Apoi, te-ai lega de ViewModel pentru Vizualizare. Acțiunea controlerului va obține modelele de care are nevoie și va construi o instanță a modelului ViewModel pentru a trece la Vizualizare.

O altă opțiune ar fi să utilizați un Tuple . Este o clasă generică care acționează ca un container puternic tipărit pentru mai multe alte tipuri. Modelul View va fi astfel:

Tuple

Din perspectiva designului general, recomandarea mea cea mai mare ar fi să ia în considerare modul în care modelele dvs. se raportează unul la celălalt și să găsească "rădăcina agregată". În cazul unui post de blog cu comentarii, suna ca postul ar trebui să fie rădăcina agregată. Modelul însuși trebuie să aibă comentariile în cadrul acestuia. Ceva de genul:

public class BlogPost
{
    public string Title { get; set; }
    public string Body { get; set; }
    public IEnumerable Comments { get; set; }
}

Ideea este că rădăcina agregată este obiectul parental și cunoaște intern obiectele copilului său. Nu trebuie să compuneți manual aceste ierarhii de obiecte ori de câte ori doriți să le utilizați.

0
adăugat

Trebuie să creați un ViewModel pentru a reprezenta această Vizualizare sau datele pe care această vizualizare trebuie să le aibă, de exemplu:

public class OrderViewModel {

   public int Id { get; set; }
   public DateTime DateOrder { get; set; }
   public decimal Total { get; set; }
   public string CustomerName { get; set; }

   public List Items { get; set; }

  //other properties     
}

Și veți folosi acest ViewModel pentru a tasta vizualizarea dvs., pentru eșantion (folosind razor):

@model Models.ViewModels.OrderViewModel
0
adăugat

Depinde de relația dintre comentariile din model. În mod obișnuit, comentariile ar trebui să fie o colecție de copii de post. Deci, în opinia dvs. ar trebui să puteți face comentarii cu ceva de genul acesta (Razor):

@foreach (var comment in Model.Comments) {
   //comments display goes here
}

Asigurați-vă că atunci când treceți modelul la vizualizarea de la controler, nu produceți o interogare ineficientă. Asigurați-vă că interogarea primește comentariile cu blogul, în funcție de modul în care obțineți modelul dvs. în DB. Dacă utilizați EF care ar fi directiva "Include", de ex.

.Include(p => p.Comment);
0
adăugat

O opțiune este Crearea unui model compozit care să reprezinte ambele grupuri de date necesare pentru a face vizualizarea și să treacă de la fiecare sub model la șabloanele editorului din vizualizarea însăși.

0
adăugat