gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 属性路由找不到区域 View

转载 作者:行者123 更新时间:2023-12-04 02:55:18 24 4
gpt4 key购买 nike

我一直在到处寻找这个问题的答案,但我似乎找不到任何答案。我基本上有一个 MVC 应用程序设置,我正在使用内置的 AttributeRouting对于我的路线。

文件夹结构如下所示;

  • 型号
  • 浏览次数
  • Controller
  • 地区
  • 成员
  • MemberAreaRegistration.cs
  • Controller
  • HomeController.cs
  • 观看次数

  • 帐号.cshtml

  • 然后我在 global.asax 中连接我的路由像这样;
    public class Application : System.Web.HttpApplication {
    protected void Application_Start(){
    AreaRegistration.RegisterAllAreas();
    // other web optimization stuff
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    }

    那么, MemberAreaRegistration.cs很简单。
    namespace App.Web.Areas.Member {
    public class MemberAreaRegistration: AreaRegistration {
    public override string AreaName { get { return "Member"; } }
    }
    public override void RegisterArea( AreaRegistrationContext context){ }
    }

    我尝试使用属性连接它......
    /areas/member/controllers/homecontroller.cs
    // ...
    [Route("member/account")]
    public ActionResult Account() { return View(); }
    // ...

    问题是这找到了路线,但找不到 View 。我收到以下错误;

    The view 'Account' or its master was not found or no view engine supports the searched locations. The following locations were searched:

    ~/Views/Home/Account.aspx

    ~/Views/Home/Account.ascx

    ~/Views/Shared/Account.aspx

    ~/Views/Shared/Account.ascx

    ~/Views/Home/Account.cshtml

    ~/Views/Home/Account.vbhtml

    ~/Views/Shared/Account.cshtml

    ~/Views/Shared/Account.vbhtml



    从各方面来看,这应该可以正常工作 - 如果没有,我希望 ~/area至少在它试图搜索的路径中。我是否必须连接一些额外的东西来实现这个功能?

    我正在使用 ASP.NET MVC 5.0

    我对 View 的绝对路径进行了硬编码,它有效。显然,这不是一个好情况。我更喜欢它找到不符合惯例的 View 。但是如果我输入 return View("~/areas/member/views/home/account.cshtml");我确实得到了 View - 所以我知道它可以访问文件并且它是正确的。

    这是我的 RouteConfig.cs每个请求

    路由配置文件
    public class RouteConfig {
    public static void RegisterRoutes(RouteCollection routes) {
    // mvc attribute routing allows us to supersede normal routing mechanisms and
    // declare our routes a bit more verbosely
    routes.MapMvcAttributeRoutes();

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

    最佳答案

    这是因为,一旦您将路由定义为操作的属性,ASP.NET MVC 就不知道它位于哪个区域,因此它不知道在哪里寻找 View 。

    在 Controller 中 Account Action 在,尝试明确指定一个 RouteArea属性。

    我正在写这个,但它应该是这样的:

    [RouteArea("Member")]
    [RoutePrefix("member")]
    public class HomeController: Controller {
    [Route("account")]
    public ActionResult Account() { return View(); }
    }

    或者,或者:
    [RouteArea("Member")]
    public class HomeController: Controller {
    [Route("member/account")]
    public ActionResult Account() { return View(); }
    }

    关于asp.net-mvc - ASP.NET MVC - 属性路由找不到区域 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504965/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com