Zaistniała mi ostatnio potrzeba umieszczenia danych z dwóch modeli w jednym widoku. Rozwiązałem to w ten sposób, że stworzyłem sobie ViewModel, który wygląda mniej więcej tak:
public class CompanyViewModel
{
public IEnumerable<HighElectrican.Models.CompanyInformations> companyInf { get;set; }
public IEnumerable<HighElectrican.Models.Review> review { get;set; }
}
Przestrzeń nazw tego modelu to ViewModels.
W miejscu, w którym wyświetlam dane z tego modelu do tabeli odnoszę się do przestrzeni nazw:
@model IEnumerable<HighElectrican.Models.Review>
Czyli nie do ViewModelu, co ułatwia sprawę. Kiedy jednak chcę stworzyć metodę, która zapisuje dane do bazy muszę się odnieść do niego w taki sposób:
@model HighElectrican.ViewModels.CompanyViewModel
a każde pole do edycji wygląda wtedy tak:
@Html.EditorFor(m => m.review.First().name
i tutaj mam pytanie: czy dobrze się do tego odnoszę? Co prawda to działa, ale czy tak się powinno to robić?
Widok ten jest generowany jako partialview w głownym widoku.
Nie mogę jednak metody kontrolera powiązać z tym widokiem, dlatego to
@model HighElectrican.ViewModels.CompanyViewModel
muszę wpisać ręcznie a wydaje mi się, że tak nie powinno się robić.
Metoda akcji głowneg widoku wygląda tak:
public ActionResult Index()
{
// ViewModel vm = new ViewModel();
CompanyViewModel vm = new CompanyViewModel();
vm.companyInf = db.companyInformations.ToList();
vm.review = db.reviews.ToList();
return View(vm);
// return View();
}
Jak mogę przenieść wczytanie danych z bazy do modelu do kontrolera od widoku Review? Chyba,że może to pozostać w tym? Jak myślicie?