2013-02-11 2 views
9

У меня есть макет многоуровневые мастер-страницы в ASP.NET MVC 4.Значение не может быть пустым или пустым. Имя параметра: contentPath

я следующее:

<title>@ViewBag.Title</title> 

Порядок компоновки страниц выглядит следующим образом:

  1. _Layout.cshtml
  2. _SubLayout.cshtml (на основе _Layout.cshtml)
  3. Index.cshtml (на основе _SubLayout.cshtml)

Я устанавливаю @ ViewBag.Title внутри действия индекса. Однако я получаю следующее исключение:

Значение не может быть пустым или пустым. Имя параметра: contentPath


Вот код, у меня есть. Я просто сделать код ASP.NET шаблонов проектирования книг работать на VS 2012/MVC 4

_Layout.cshtml

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
    <meta name="viewport" content="width=device-width" /> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<div id="main">  
    <div id="header">   
     <span><a href="@Url.Content("")"> 
     <img alt="Agatha's Clothing Store" 
      src="@Url.Content("/Content/Images/Structure/lg_logo.png")" 
      border="0" /></a></span>   
    </div> 

    <div id="headerSummary">   
     @RenderSection("headerBasketSummary", required: false)     
    </div> 
    <div class="topBarContainer">   
     <div id="background">   
      <div id="navigation"> 
       @RenderSection("MenuContent", required: false) 
      </div>  
      <div id="content"> 
       @RenderBody() 
      </div>    
      <div style="clear: both;" /> 
     </div> 
    </div>   
    @Html.Partial("_SiteFooter") 
</div> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script> 
<script src="//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.js"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-jtemplates.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/agatha-common-scripts.js")"></script> 

</body> 
</html> 

_ProductCatalogProduct.cshtml Index

@model BaseProductCatalogPageView 
@using Agathas.Storefront.Controllers.ViewModels.ProductCatalog 
@using Agathas.Storefront.UI.Web.MVC.Helpers 

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml";     
} 

@if (IsSectionDefined("MenuContent")) 
{ 
    @RenderSection("MenuContent", required: false) 
} 
else 
{ 
    @Html.Partial("_Categories", ((BaseProductCatalogPageView)Model).Categories) 
} 
@RenderBody(); 

.cshtml

@model HomePageView 
@using Agathas.Storefront.Controllers.ViewModels.ProductCatalog 
@using Agathas.Storefront.Services.ViewModels 
@using Agathas.Storefront.UI.Web.MVC.Helpers 

@{ 
    Layout = "~/Views/Shared/_ProductCatalogLayout.cshtml"; 
    ViewBag.Title = "Home Page"; 
} 

<img width="559" height="297" 
     src="@Url.Content("~/Content/Images/Products/product-lifestyle.jpg")" 
     style="border-width: 0px; padding: 0px; margin: 0px" /> 
    <div style="clear: both;"></div> 
    <h2>Top Products</h2> 
    <div id="items" style="border-width: 1px; padding: 0px; margin: 0px"> 
     <ul class="items-list"> 
      @foreach (ProductSummaryView product in Model.Products) 
      { 
       <li class="item-detail"> 
       <a class="item-productimage-link" href="@Url.Action("Detail", "Product",  new { id = product.Id }, null)"> 
      <img class="item-productimage" src="@Url.Content("~/Content/Images/Products/" + product.Id.ToString() +".jpg"))" /></a> 
      <div class="item-productname">@Html.ActionLink(product.BrandName + " " + product.Name, "Detail", "Product", new { id = product.Id }, null)</div> 
      <div class="item-price">@product.Price</div> 
      </li> 
     } 
    </ul> 
</div> 

Большое спасибо

+0

Можете ли вы предоставить полный стек? – nemesv

+0

Глупый вопрос, но оба ViewBags называются одной и той же капитализацией ... Можете ли вы предоставить немного кода, чтобы лучше понять проблему? –

ответ

0

Это может произойти, если вы присваиваете значение в файл представления для детей Razor, который также установлен в родительском один, но отображается в частично вызывается Layout.cshtml

Для пример

_Layout.cshtml | (родной) | Parent.cshtml | (родной) | Page1.cshtml

В Page1.cshtml я

ViewBag.Title= "Value1"; 

В Parent.cshtml я делаю то же самое, но с помощью вызова Umbraco:

ViewBag.Title = Umbraco.Field("value").ToString(); 

Исправление является для удаления назначения в Parent.cshtml. Кажется, это ошибка, и я боюсь, что это единственное исправление, которое я нашел. Надеюсь, это поможет вам ...

20

Этот кусок кода бросает исключение: <a href="@Url.Content("")">. Это происходит потому, что параметр contentPath метода Url.Content не может быть пустым или пустым.

Смежные вопросы