ASP.NET MVC3 Razor-syntax helfen - ich bin immer stecken in einer unendlichen Schleife
Ich versuche zu konvertieren, eine kleine mvc2 Anwendung der mvc3 razor-syntax. In meinem mvc2 Anwendung bin ich mit der aspx-view-Motor mit einer master-Seite. Nach dem Vorbild von Steven Sanderson Pro-MVC2-Buch, 2. Auflage, in der masterpage nenne ich eine controller-Aktion, macht einen seitlichen Blick für jede Entität. Dies ist korrekt arbeitet.
<div id="categories">
<% Html.RenderAction("Menu", "Nav"); %>
</div>
mit _layout.cshtml und razor, ich versuche dies. Hier ist, wo mein problem kommt in.
<div id="categories">
@{
Html.RenderAction("Menu", "Nav");
}
</div>
Dadurch verursacht wird, dass eine unendliche Schleife und ich bin immer seltsam genug, eine StackOverflowException. Kann mir jemand helfen das problem zu beheben? Hier ist die controller-Methode code.
public ViewResult Menu(string personId)
{
Func<string, NavLink> makeLink = pId => new NavLink
{
Text = pId ?? "Home"
, RouteValues = new RouteValueDictionary(new { controller = "Person", action = "Person"})
};
List<NavLink> navLinks = new List<NavLink> {makeLink(null)};
Func<Person, NavLink> makeLink2 = p => new NavLink
{
Text = p.Name ?? "Home"
, RouteValues = new RouteValueDictionary(new { controller = "Person", action = "Person", personId = p.Id })
};
var people = usersRepository.People.OrderBy(x => x.Name);
var peopleLinks = EnumerableHelpers.MakeLinks(people, makeLink2);
navLinks.AddRange(peopleLinks);
return View("_menu", navLinks);
}
Jede Hilfe oder Tipps wird am meisten geschätzt.
Dank,
~ck in San Diego
- Gute Frage, ich war auf der Suche im internet für das gleiche problem... PartialView funktioniert, aber die tests sind nun gebrochen ;(
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht posten den aktuellen stack-trace, aber aus der Beschreibung, die ich vermute, Ihr recurssion ist in der 'partiellen' action view läuft die layout-Seite, welche macht die Aktion, die rendert das layout, etc.
Versuchen, Rückgabe einem
PartialView
von Ihrem Kind Aktion-Methode anstelle einesView
. Dies verhindert, dass die _ViewStart Seite ausgeführt wird, die verhindern, dass das layout gerendert wird, für Ihr Kind handeln. Weitere Diskussion dazu ist hier: http://forums.asp.net/t/1624687.aspxsetzen
in der Spitze Ihrer Teilansicht .
zunächst Ihren personId parameter wird nicht verwendet (ist es richtig weitergeleitet sowieso)?
aber ich würde auf jeden Fall starten, indem Sie in der EnumerableHelpers.MakeLinks
es ist der beste Ort für ein rekursions-problem zu verstecken, versuchen Sie, einen Haltepunkt gibt es
weil von dem, was ich verwendet
Modell :
Ansicht
Controller
gerendert
Text
controllerPerson
actionPerson
Home
controllerPerson
actionPerson
personId1
carley
controllerPerson
actionPerson
personId2
mark
Versuchen, die gerade von dieser (statt RenderAction)
Was ist in Ihrem Menü Ansicht? Gibt es irgendetwas was könnte die Ursache eine Rekursion?