Ich muss eine Ansicht erstellen, die die Informationen zum Auftragskopf anzeigt, und ich muss eine Profilansicht hinzufügen, die ein Raster mit Einzelposten anzeigt. Die Teilansicht wird stark von einem Viewmodel typisiert. Ich verstehe, dass ich den HTML-Helper @ Html.Partial ("Pfad/Ansicht") verwenden sollte. Ich habe bis jetzt nur Controller verwendet, um eine Ansicht zu öffnen und das Viewmodel zu füllen, bevor ich es an die View sendete. Da die Teilansicht vom HTML-Helper aufgerufen wird, würde ich gerne wissen, was der beste Weg wäre, die Parital-Ansicht mit den Modelldaten zu füllen.So füllen Sie die partielle Ansicht von mvc razor
Antwort
Option 1:. Vererben von Elternseite
Standardmäßig wird jede Teilansicht, die durch Aufrufen von gerendert wird, das Ansichtsmodell an die übergeordnete Ansicht übergeben.
Also, wenn Sie haben:
Ansicht Modell
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")
Die OrderLineItems Seite sollte ein MyNamespace.OrderViewModel
an sie übergeben bekommen ... so Ihre Teilansicht sollte wie folgt aussehen:
OrderLineItems.cshtml
@model MyNamespace.OrderInfoViewModel
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
Option 2: Geben Sie Modell
können Sie den zweiten Parameter verwenden, um die Ansicht Modell angeben weitergegeben werden. I.e.
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
}
Option 3: Verwenden Teilaktionen
Wenn Sie eine Teilansicht über mehrere wiederzuverwenden müssen Seiten könnte es gut sein Idee, eine Teilansicht zu verwenden, um zu vermeiden, dass verschiedene Ansichtsmodelle mit den gleichen Informationen gefüllt werden müssen, nur weil die Seite dasselbe Teil verwendet.
z.
Ansicht Modell
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
}
Mit einer Teilansicht senden Sie ein Modell einfach so ein, wie Sie es mit einer normalen Ansicht tun würden. Zum Beispiel würden, wenn Ihr Modell namens eine Eigenschaft LineItem Objekte ‚Lineitem‘ Sie einfach tun:
@Html.Partial("_PartialName", Model.LineItems)
Nun, wenn Ihr Modell nicht, dass die Eigenschaft hat, können Sie entweder fügen Sie es, oder ihm eine andere Art und Weise passieren wie ViewBag (ich bevorzuge eine stark typisierte Methode, aber das ist meine opnion:
@Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)
Dies sind nicht die einzigen Möglichkeiten, aber sie sind meine bevorzugten Methoden
- 1. So füllen Sie eine DropDownList in MVC
- 2. So erhalten Sie die Produktversion von einer Razor View
- 3. Razor Ansicht Motor RenderSection
- 4. ServiceStack setzen Authentifizierung Razor Ansicht
- 5. ASP.NET MVC Razor Designer
- 6. , wie partielle Ansicht Modelldaten während des Postback in asp.net mvc
- 7. Partielle Seiteneigenschaft in Ansicht ohne Code hinter
- 8. String.Trim() in Razor Ansicht
- 9. aufrufen JavaScript-Funktion in MVC 5 Razor Ansicht
- 10. ASP.NEt MVC mit Web-API, um eine Razor-Ansicht
- 11. Wie verschachtelte Daten aus viewbag in MVC Razor Ansicht zeigen
- 12. Partielle Ansicht vom Laden verhindern
- 13. ASP.NET MVC Razor Verkettungs
- 14. ASP.NET MVC laden Razor Ansicht aus der Datenbank
- 15. MVC: Füllen Sie die Formularfelder des Filters neu, ohne Model
- 16. MVC ASP.NET oder Razor
- 17. Mit If-Anweisung in einem MVC Razor Ansicht
- 18. ASP.NET MVC Razor Inhalt Platzhalter
- 19. TimePicker Razor ASP.NET-MVC
- 20. Autocomplete mit MVC 4/Razor
- 21. So füllen Sie die Farbe auf Dreieck
- 22. Schleife durch Modell-Eigenschaft mit Razor in MVC-Ansicht
- 23. MVC 3.0 JQUERY Partielle Seitenaktualisierung
- 24. Partielle Seite zurück mit MVC
- 25. Verwenden von ChartJs mit MVC 5 Razor
- 26. Verwenden Sie Switch-Gehäuse in MVC-Ansicht
- 27. So füllen Sie UICollectionViewCells innerhalb von UitableviewCell
- 28. jQuery append razor mvc
- 29. Rendern partielle JSP-Fragmente in Spring MVC?
- 30. So füllen Sie JComboBox von SqlServer
Was ist das Szenario, in dem die Option 3 würde mehr als 2 bevorzugt werden? Könnte ich nicht einfach die Teilansicht aufrufen und trotzdem TROCKEN sein? – NickSuperb
Mit den Optionen 1 und 2 müssen Sie das Modell der Hauptseitenansicht mit allen Daten füllen, die für die Teilansicht benötigt werden. Das Szenario in dieser Frage/Antwort ist nicht das beste. Nehmen wir an, Sie hatten ein Einkaufswagen-Übersichts-Widget, das auf zahlreichen Seiten angezeigt wird ... Es wäre einfacher, Option 3 zu verwenden. Andernfalls wäre jede einzelne Aktion, die auch das Warenkorb-Widget (die meisten Seiten) anzeigt, dafür verantwortlich, das Ansichtsmodell mit den Daten zu füllen, die das Warenkorb-Widget benötigt. – Charlino
Richtig merke ich jetzt, dass Sie das Modell indirekt und nicht direkt in die Teilansicht trichterlos leiten müssten. – NickSuperb