簡體   English   中英

Pro Asp.net MVC 2:示例問題

[英]Pro Asp.net mvc 2: Problem in example

我正在嘗試從Pro Asp.net MVC2的第5章中重新創建一個示例。 但是,一旦我添加菜單代碼服務器就會停止工作。 代碼有問題嗎?

public class NavController : Controller
    {
        private IProductRepository productsRepository;
        public NavController(IProductRepository productsRepository)
        {
            this.productsRepository = productsRepository;
        }

        public ViewResult Menu()
        {
            Func<string, NavLink> makeLink = categoryName => new NavLink
            {
                Text = categoryName ?? "Home",
                RouteValues = new RouteValueDictionary( new {
                    controller = "Products", action = "List", category = categoryName, page = 1
                })
            };

            List<NavLink> navLinks = new List<NavLink>();
            navLinks.Add(makeLink(null));

            var categories = productsRepository.Products.Select(x => x.Category);
            foreach (string categoryName in categories.Distinct().OrderBy(x => x))
                navLinks.Add(makeLink(categoryName));

            return View(navLinks);
        }

    }

Menu.cshtml

@model IEnumerable<SStore.WebUI.Models.NavLink>

@foreach (var link in Model)
{
    Html.RouteLink(link.Text, link.RouteValues);
}

如果我從母版頁刪除此行,則服務器正常工作

@{
            Html.RenderAction("Menu", "Nav");
        }

否則出現此錯誤 在此處輸入圖片說明

Html.RenderAction("Menu", "Nav"); :這是可怕的遞歸: Nav/Menu呈現Nav/Menu呈現Nav/Menu ...,直到耗盡堆棧並且Web服務器崩潰為止:-)

當您渲染這樣的子動作時,請確保它沒有主控器,或者主控器會一次又一次地重新渲染它,....因此,請像以下那樣修改此視圖( ~/Views/Nav/Menu.cshtml ):

@model IEnumerable<SStore.WebUI.Models.NavLink>
@{
    Layout = null;
}

@foreach (var link in Model)
{
    Html.RouteLink(link.Text, link.RouteValues);
}

讓我解釋:

您在本書中看到的示例使用的是WebForms視圖引擎。 在此視圖引擎中,您具有.aspx (視圖)和.ascx (部分)。 我想在書中他們使用的是Menu.ascx ,默認情況下它沒有母版,因為它是部分母版。

在Razor中不再有這種區別。 您只擁有視圖:.cshtml頁面。 由您決定是否擁有主控。 有不同的方法。 一個是我之前顯示的內容,另一個是在子操作中return PartialView(navLinks)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM