【问题标题】:Must the first view must always be called index.aspx?必须始终将第一个视图称为 index.aspx 吗?
【发布时间】:2012-10-17 00:13:45
【问题描述】:

我创建了一个名为 loginController.cs 的控制器,并创建了一个名为 login.aspx 的视图

如何从 loginController.cs 调用该视图?

ActionResult 始终设置为索引,为了简洁起见,我想指定控制器在调用时使用的视图,而不是始终调用其默认索引?

希望这是有道理的。

【问题讨论】:

  • 我已经为你准备了这个冗长的答案......但我想我可能会问:你为什么要更改默认行为?
  • 不一定非得叫index.aspx,aspx也不应该在url里。都是关于路由的。

标签: c# asp.net-mvc asp.net-mvc-views


【解决方案1】:

您可以自定义 MVC 路由中的几乎所有内容 - 对路由的外观没有特别限制(只有排序很重要),您可以以不同于方法名称的方式命名操作(通过 ActionName 属性),您可以为视图命名任何您想要(即通过名称返回特定视图)。

return View("login");

【讨论】:

    【解决方案2】:

    为了实际回答问题..您可以在Global.asax 中添加一个ABOVE默认路由:

    routes.MapRoute(
        "SpecialLoginRoute",
        "login/",
        new { controller = "Login", action = "Login", id = UrlParameter.Optional }
    );
    
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    

    ..虽然,如果没有正确考虑您要实现的目标(即..更改 MVC 默认执行的操作),您最终肯定会遇到很多混乱的路线。

    【讨论】:

    • 嗯...这是一个更好的问题 > 所有视图都必须有一个文件夹才能被 ActionResult 调用吗?我有一个联系人文件夹,其中包含添加、编辑、删除视图。我只想要一个控制器“联系人”。这意味着我必须将添加、编辑或删除视图之一命名为“索引”。以后可能会令人困惑。
    • 实际上我正在查看登录页面或编辑页面时,在顶部的 index.aspx 中看到也令人困惑。看到我的问题了吗?
    • "index.aspx" 不应出现在 URL 中,除非您手动将其放在那里。您不必将文件名放在 URL 中。例如:website.com/Login/Index/Index.aspx.. 你只需输入 website.com/Login.
    • 是的,我明白了。最后一条评论是红鲱鱼,我的意思是当我开发页面时......在顶部我看到 index.aspx 并且我在想......那是哪一个?哦,对了,它是添加联系人页面。呵呵。所以我在想,我将它重命名为 add.aspx,然后重定向控制器以使用 add.aspx 作为构造视图。但如果它和 routes.MapRoute 一样脏。我可能会忍受它。
    【解决方案3】:

    您通过 Action 方法从控制器返回视图。

    public class LoginController:Controller
    {
      public ActionResult Index()
      {
        return View();
        //this method will return `~/Views/Login/Index.csthml/aspx` file
      }
      public ActionResult RecoverPassword()
      {
        return View();
        //this method will return `~/Views/Login/RecoverPassword.csthml/aspx` file
      }
    }
    

    如果需要返回不同的视图(除了动作方法名,可以明确提及

      public ActionResult FakeLogin()
      {
        return View("Login");
        //this method will return `~/Views/Login/Login.csthml/aspx` file
      }
    

    如果你想返回一个存在于另一个控制器文件夹中的视图,在 ~/Views 中,你可以使用完整路径

       public ActionResult FakeLogin2()
      {
        return View("~/Views/Account/Signin");
        //this method will return `~/Views/Account/Signin.csthml/aspx` file
      }
    

    【讨论】:

    • return View("~/Views/homepage") 似乎没有返回 homepage.aspx,即使它存在于 View 根目录中。有什么想法吗?
    • [InvalidOperationException:未找到视图“~/Views/index”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:~/Views/index]
    • 您错过了控制器名称。格式为 ~/Views/{ControllerName}/{ActionMethodName}.aspx ex : ~/views/home/index.aspx
    • 对。回家后我会考虑并尝试。白天是 PHP,晚上是 .NET。呵呵...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2020-06-26
    • 2022-10-24
    相关资源
    最近更新 更多