ASP.NET MVC3 Razor语法帮助 - 我陷入无限循环

Hca*_*tek 11 asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-2

我正在尝试将小型mvc2应用程序转换为mvc3 razor语法.在我的mvc2应用程序中,我使用带有母版页的aspx视图引擎.按照Steven Sanderson的Pro MVC2第2版的例子,在母版页中我调用了一个控制器动作,为每个实体呈现局部视图.这是正常的.

 <div id="categories">
    <% Html.RenderAction("Menu", "Nav"); %>
</div>
Run Code Online (Sandbox Code Playgroud)

使用_layout.cshtml和razor我正在尝试这个.这是我的问题所在.

 <div id="categories">
    @{ 
        Html.RenderAction("Menu", "Nav"); 

    }
</div>
Run Code Online (Sandbox Code Playgroud)

这导致了一个无限循环,而且我得到了一个奇怪的StackOverflowException.任何人都可以帮我纠正这个问题吗?这是控制器方法代码.

  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);
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助或提示是最受欢迎的.

谢谢,
〜在圣地亚哥

mar*_*ind 23

您没有发布实际的堆栈跟踪,但是从描述中我猜测您的递归是在运行布局页面的"部分"操作视图中,该视图呈现了呈现布局的操作等.

尝试PartialView从您的子操作方法返回a 而不是View.这将阻止执行_ViewStart页面,这将阻止为您的子操作呈现布局.有关这方面的更多讨论,请访问:http://forums.asp.net/t/1624687.aspx