值不能为null或为空。参数名称:contentPath

时间:2013-02-11 15:44:52

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在ASP.NET MVC 4中有一个多级布局母版页。

我有以下内容:

<title>@ViewBag.Title</title>

布局页面的顺序如下:

  1. _Layout.cshtml
  2. _SubLayout.cshtml(基于_Layout.cshtml)
  3. Index.cshtml(基于_SubLayout.cshtml)
  4. 我在Index Action中设置@ ViewBag.Title。但是,我得到以下异常:

      

    值不能为null或为空。参数名称: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'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

    @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>
    

    非常感谢

3 个答案:

答案 0 :(得分:21)

这段代码抛出异常:<a href="@Url.Content("")">。发生这种情况是因为Url.Content方法的contentPath参数不能为null或为空。

答案 1 :(得分:0)

如果您在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中的赋值。这似乎是一个错误,我担心这是我发现的唯一修复。希望它可以帮助你...

答案 2 :(得分:0)

在将路径用作图像源之前,应检查路径是否为空或为空

   @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>