wake-up-neo.com

MVC 4 - Wie übergebe ich Modelldaten an eine Teilansicht?

Ich erstelle eine Profilseite, die eine Reihe von Abschnitten enthält, die sich auf ein bestimmtes Modell (Mandanten) beziehen - AboutMe, MyPreferences - diese Art von Dingen. Jeder dieser Abschnitte wird eine Teilansicht sein, um teilweise Seitenaktualisierungen mit AJAX zu ermöglichen.

Wenn ich im TenantController auf ein ActionResult klicke, kann ich eine stark typisierte Ansicht erstellen und die Modelldaten werden an die Ansicht fein übergeben. Das kann ich mit Teilansichten nicht erreichen.

Ich habe eine Teilansicht _TenantDetailsPartial Erstellt:

@model LetLord.Models.Tenant
<div class="row-fluid">
    @Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
    @Html.DisplayFor(x => x.UserName) // this displays nothing
</div>

Ich habe dann eine Ansicht MyProfile, die die genannten Teilansichten rendert:

@model LetLord.Models.Tenant
<div class="row-fluid">
    <div class="span4 well-border">
         @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", 
         new ViewDataDictionary<LetLord.Models.Tenant>())
    </div>
</div>

Wenn ich den Code in der DIV in _TenantDetailsPartial Innerhalb von @if(model != null){} einhülle, wird auf der Seite nichts angezeigt. Ich vermute, dass ein leeres Modell an die Ansicht übergeben wird.

Wie kommt es, dass beim Erstellen einer stark typisierten Ansicht aus einem ActionResult der Benutzer in der 'Sitzung' an die Ansicht übergeben wird? Wie kann der Benutzer in der 'Sitzung' an eine Teilansicht übergeben werden, die nicht aus einem ActionResult erstellt wurde? Wenn ich etwas über das Konzept vermisse, erklären Sie bitte.

30
MattSull

Sie übergeben das Modell nicht an das Teilmodell, sondern übergeben eine new ViewDataDictionary<LetLord.Models.Tenant>(). Versuche dies:

@model LetLord.Models.Tenant
<div class="row-fluid">
    <div class="span4 well-border">
         @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
    </div>
</div>
60
Daniel Imms

Dies könnte auch dazu führen, dass es funktioniert:

@{
Html.RenderPartial("your view", your_model, ViewData);
}

oder

@{
Html.RenderPartial("your view", your_model);
}

Weitere Informationen zu RenderPartial und ähnlichen HTML-Hilfsprogrammen in MVC finden Sie unter dieser beliebte StackOverflow-Thread

12
lzlstyle

Drei Möglichkeiten, um Modelldaten an eine Teilansicht zu übergeben (möglicherweise gibt es mehr)

Dies ist die Ansichtsseite

Methode 1 Bei Anzeige auffüllen

@{    
    PartialViewTestSOl.Models.CountryModel ctry1 = new PartialViewTestSOl.Models.CountryModel();
    ctry1.CountryName="India";
    ctry1.ID=1;    

    PartialViewTestSOl.Models.CountryModel ctry2 = new PartialViewTestSOl.Models.CountryModel();
    ctry2.CountryName="Africa";
    ctry2.ID=2;

    List<PartialViewTestSOl.Models.CountryModel> CountryList = new List<PartialViewTestSOl.Models.CountryModel>();
    CountryList.Add(ctry1);
    CountryList.Add(ctry2);    

}

@{
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",CountryList );
}

Methode Zwei Pass Through ViewBag

@{
    var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
}

Methode Drei durchlaufen das Modell

@{
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
}

enter image description here

5
Arun Prasad E S