【问题标题】:MVC 6 Views only displaying white pageMVC 6 视图只显示白页
【发布时间】:2016-01-15 14:24:13
【问题描述】:

当我尝试在 MVC 6 的某个区域中创建新视图时,它只显示一个白页。 Home/Index 动作工作正常,这个动作会击中控制器但从不显示视图。我可以返回内容并获得显示,但是当我尝试返回视图时它会中断。有什么建议吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using PmData.Models;

// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860

namespace PlantManagement.Areas.Cms.Controllers
{
    [Area("Cms")]
    public class AssetsController : Controller
    {
        // GET: /<controller>/
        public IActionResult Index()
        {
            return View();
        }
    }
}

与调用主布局页面的空白视图相结合。

【问题讨论】:

  • 您应该始终尝试包含一些代码,否则很难帮助您。 stackoverflow.com/help/how-to-ask
  • 我添加了我在其中的代码......它基本上是默认控制器转到一个空白的 Index.cshtml,它通过 _ViewStart.cshtml 调用主布局页面。就像我说的那样,该区域的 Home/Index 效果很好。
  • 你能澄清一下:“......它坏了”。
  • 是的,它给了我一个纯白的屏幕,没有别的。在我将 .cshtml 页面放入文件夹之前,它给了我一个 500 错误(应该如此),在我将 .cshtml 文件添加到位之后没有更多错误,但它仍然只会显示一个没有错误附加的白屏.
  • 能否在代码中同时包含 Home/Index.cshtml 和 Assets/Index.cshtml?

标签: c# .net model-view-controller


【解决方案1】:

我发现了问题。可悲的是,这是因为我对 MVC 6 / vNext 太陌生了,所以我觉得很傻。这是因为他们在页面上的某个项目存在问题,但没有 app.UseDeveloperExceptionPage();在 startup.cs 的配置中添加它永远不会向我显示实际错误,只需给我通用 500 错误和白页。一旦我添加它开始产生错误,我就可以使用它并给我我需要的东西。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,并通过以下方式解决了它,

    a) 在您拥有的每个区域中创建一个 _ViewStart.cshtml 文件。即Areas/Cms/Views/_ViewStart.cshtml

    b) 在这个 _ViewStart.cshtml 文件中添加

    @{
         Layout = "~/Areas/Cms/Views/Shared/_LayoutCms.cshtml
     }
    

    c) 将 _LayoutCms.cshtml 添加到 Areas/Cms/Views/Shared

    d) 在此文件中添加对整个站点布局的引用

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

    以及任何其他区域特定的布局代码。

    这解决了我的空白页问题。希望你也是

    除了我上一个答案,试试这些步骤

    e) 确保您在 Cms 区域文件夹中设置了区域注册设置,即 Areas/Cms/CmsAreaRegistration.cs

    public class CmsAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Cms";
            }
        }
    
        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Cms_default",
                "Cms/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    f) 在您的 App_Start/RouteConfig.cs 中,确保您通过添加 AreaRegistration.RegisterAllAreas() 来注册所有区域,如下所示。

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            AreaRegistration.RegisterAllAreas(); //Add this//
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id =     UrlParameter.Optional }
            );
        }
    }
    

    【讨论】:

    • 嘿,很抱歉这么久才回复。我今天尝试了这个(第一次真正的机会)。当我在页面上添加布局时,它实际上再次在控制台上产生了原始的 500 错误。我把它取下来,错误又消失了。我不禁相信这是区域/路线的设置方式。
    • 如果是路由问题,请确保正确配置区域路由。 (看看我添加的编辑)。还要仔细检查您的 Cms 区域视图中是否有 web.config。
    • 我认为在 MVC6 中不再需要 web.configs 了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多