MVC - 无法解析视图(单独项目中的控制器和视图)

时间:2013-06-05 13:41:17

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

我有一个包含4个项目的解决方案:

  • AS.Core.Common(参考:数据,网络)
  • AS.Core.Controllers(参考文献:Common,Data,Web)
  • AS.Core.Data
  • AS.Core.Web(参考:数据)

在我的控制器中,我返回视图的任何地方:

  

返回视图(“〜/ Views / Home / Index.cshtml”);

它以红色突出显示,我得到"Cannot resolve view '~/Views/Home/Index.cshtml'"

所有四个项目都成功构建,但是当我点击F5时,我得到以下内容:

  应用程序中的服务器错误。

     

无法找到资源。

     

描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。

     

请求的网址:/

     

版本信息:Microsoft .NET Framework版本:4.0.30319;   ASP.NET版本:4.0.30319.17929

如何让我的控制器查看我的视图以便他们正确解决?我假设这就是我得到404响应的原因。

我的Global.asax.cs看起来像这样:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // Register the default hubs route: ~/signalr
        RouteTable.Routes.MapHubs();

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

我的RouteConfig.cs(我添加了名称空间,但似乎没有帮助)

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        namespaces: new[] { "AS.Core.Controllers" },
        defaults: new 
        {
            controller = "Home", 
            action = "Index", 
            id = UrlParameter.Optional
        });
}

这是我的HomeController.cs

public class HomeController : Controller
{
    public ActionResult Index()
    {
        //return View("~/Views/Home/Index.cshtml");
        return View();
    }
 }

1 个答案:

答案 0 :(得分:7)

中,您可以在相应控制器的视图文件夹中返回有效的视图。例如,如果您有一个名为Product的控制器,则路径~/Views/Product/Index.cshtml中可以有一个文件夹。在Index操作中,您只需使用View()类库的Controller方法返回一个视图,该方法是asp.net mvc中的所有控制器都应该继承的。样本:

public ActionResult Index()
{
   return View();
}

Asp.Net将在与您的操作名称相同的文件夹上找到一个视图,在这种情况下为Index

您还可以使用View方法返回另一个视图,因为您在文件夹上有相应的视图,以获取示例:

public ActionResult Index()
{
   return View("About");
}

考虑到这种情况,您应该在About文件夹中有一个名为Product的视图。样本:~/Views/Product/About.cshtml

如果将控制器更改为另一个项目(类库),则必须在asp.net mvc初始化上设置控制器的默认命名空间,在Global.asax文件上尝试类似的操作{ {1}}方法:

Application_Start

看一下这篇文章:http://dotnetslackers.com/articles/aspnet/storing-asp-net-mvc-controllers-views-in-separate-assemblies.aspx