Potrzebuję utworzyć widok wyświetlający informacje o nagłówku zamówienia i muszę dodać widok patialny, który wyświetla siatkę elementów zamówienia. Widok częściowy zostanie silnie wpisany z modelu widoku. Rozumiem, że powinienem używać html helper @ Html.Partial ("Path/view"). Do tej pory korzystałem tylko z kontrolerów, aby otworzyć widok, zapełniając model podglądu przed wysłaniem go do widoku. Ponieważ widok częściowy jest wywoływany z pomocnika html, chciałbym wiedzieć, jaki byłby najlepszy sposób wypełnienia widoku parytetu danymi modelu.Sposób wypełniania częściowego widoku maszynki do golenia maszynowego
Odpowiedz
Wariant 1:. Przejmij ze strony nadrzędnej
Domyślnie każdy widok częściowy wygenerowany przez wywołanie @Html.Partial("PartialViewName")
spowoduje przekazanie modelu widoku do widoku nadrzędnego.
Więc jeśli masz:
Widok Model
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems")
Strona OrderLineItems powinien dostać MyNamespace.OrderViewModel
przeszedł więc do niego ... Twój częściowy widok powinien wyglądać tak:
OrderLineItems.cshtml
@model MyNamespace.OrderInfoViewModel
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
Opcja 2: Określanie modelu
Można użyć drugiego parametru, aby określić widok modelu mają być przekazane. To znaczy.
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems", Model.OrderItems)
OrderLineItems.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model)
{
//Do stuff
}
Wariant 3: Stosować działania cząstkowe
Jeśli trzeba ponownie użyć częściowy widok na wielokrotność strony, może to być dobre pomysł wykorzystania częściowego widoku do wyeliminowania konieczności wypełniania różnych modeli widoku tymi samymi informacjami, tylko dlatego, że strona będzie korzystała z tego samego częściowego widoku.
E.g.
Widok Model
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
}
}
Controller
public class OrderController : Controller
{
public ActionResult OrderInfo(int orderId)
{
OrderInfoViewModel viewModel = GetViewModel(orderId);
return View(viewModel);
}
public PartialViewResult OrderLineItems(int orderId)
{
IEnumerable<OrderItem> orderItems = GetOrderItems(orderId);
return Partial(orderItems);
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Action("OrderLineItems")
OrderLineItems.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
Po częściowym wyświetleniu wysyłamy model, tak jak w normalnym widoku. Na przykład, jeśli twój model ma właściwość obiektów elementu zamówienia o nazwie „LineItems” po prostu byłoby to zrobić:
@Html.Partial("_PartialName", Model.LineItems)
Teraz, jeśli dany model nie posiada tej własności, można też dodawać je lub przekazać je w inny sposób jak ViewBag (wolę silnie typami metoda, ale to moim opinię:
@Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)
nie są to jedyne sposoby, ale są moje korzystne sposoby
- 1. Formatowanie warunkowe w widoku indeksu maszynki do golenia
- 2. Mechanizm widoku maszynki do golenia, jak pisać między html?
- 3. jak dodać parametry do maszynki do golenia
- 4. Pomocy maszynki do golenia i HTML-u
- 5. Sposób wyświetlania warunkowego zwykłego tekstu za pomocą maszynki do golenia
- 6. Kiedy powinniśmy używać Pomocników Html, Pomocników do golenia lub Widoku częściowego?
- 7. Używanie jednego widoku częściowego Wielokrotnie w tym samym widoku nadrzędnym
- 8. Przenoszenie pomocników maszynki do golenia do innego pliku
- 9. Tworzenie pomocnika maszynki do golenia MVC3 podobnego do Helper.BeginForm()
- 10. Błąd kompilacji maszynki do golenia przy użyciu NancyFX
- 11. Renderowanie częściowego widoku do sekcji
- 12. Jak korzystać z maszynki do golenia Komentarz do bloku JavaScript/
- 13. Jak ustawić @ model.attribute w widoku maszynki?
- 14. Przekazywanie parametrów do widoku częściowego
- 15. Jak przekazać model do widoku maszynki Razor z Nancy
- 16. Uzyskiwanie szablonów maszynki do golenia w bibliotece klas
- 17. Czy warto migrować istniejący projekt asp.net-mvc z przeglądarką internetową do maszynki do golenia?
- 18. Strona układu MVC 3, szablon maszynki do golenia i lista rozwijana
- 19. Widok maszynki do golenia nie jest zgodny z oczekiwaniami
- 20. Jak dodać i użyć szablonu edytora maszynki do golenia
- 21. używanie zmiennej javascript w mechanizmie widokowym maszynki do golenia MVC3
- 22. Pomocnik maszynki do golenia Składnia Automatyczne formatowanie Brzydkie. Jak naprawić?
- 23. Konwersja formatu DateTime za pomocą maszynki do golenia
- 24. Czy istnieje sposób na dodanie widoku projektanta do edytora maszynki cshtml?
- 25. jak dodać maxlength dla TextAreaFor w widoku używając maszynki do golenia
- 26. Sposób korzystania z routingu kątowego w celu zagnieżdżenia 3 modeli maszynki do golenia mvc
- 27. nazwa widoku dostępu do szyn wewnątrz częściowego
- 28. RenderSection z częściowego widoku
- 29. Pobierz zmienne Sesji do ASP.NET MVC 4 (maszynki do golenia, widok)
- 30. Przejście MVC3 @ model do widoku częściowego
Jaki jest scenariusz, w którym opcja 3 byłyby korzystniejsze niż 2? Czy nie mógłbym po prostu wywołać częściowego widoku wielokrotnie i nadal być SUCHĄ? – NickSuperb
Korzystając z opcji 1 i 2, należy uzupełnić model widoku strony głównej o wszystkie dane potrzebne do wyświetlenia częściowego. Scenariusz w tym pytaniu/odpowiedzi nie jest najlepszy, powiedzmy, że masz widżet podsumowujący koszyk, który jest wyświetlany na wielu stronach ... łatwiej byłoby skorzystać z opcji nr 3. W przeciwnym razie każda akcja wyświetlająca również widżet koszyka na zakupy (większość stron) byłaby odpowiedzialna za wypełnienie jego modelu widoku danymi, których potrzebuje widżet koszyka na zakupy. – Charlino
Dobrze, teraz zdaję sobie sprawę, że musiałbyś nieustannie kierować model do częściowego widoku pośrednio, a nie bezpośrednio. – NickSuperb