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

У меня есть многоуровневые основные страницы макета в ASP.NET MVC 4.

У меня есть следующее:

<title>@ViewBag.Title</title>

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

  • _Layout.cshtml
  • _SubLayout.cshtml(на основе _Layout.cshtml)
  • Index.cshtml(на основе _SubLayout.cshtml)

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

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


Вот код, который у меня есть. Я просто делаю код для книг ASP.NET Design Patterns для 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 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

@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(); 

Index.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>

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

Ответ 1

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

Ответ 2

Это может произойти, если вы назначаете значение в файле представления Child 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. Кажется, это ошибка, и я боюсь, что это единственное исправление, которое я нашел. Надеюсь, это поможет вам...

Ответ 3

Вы должны проверить, если путь не нулевой или пустой, прежде чем использовать его в качестве источника изображения

   @foreach (var post in Model)
        {

            <div class="col-md-6">
                <div class="product-list post-list">
                    @if (!string.IsNullOrWhiteSpace(post.Photo))
                    {
                        <a href="#" class="product-list-img">
                            <img src="@Url.Content(post.Photo)" alt="">
                        </a>
                    }
</div>
</div>