【问题标题】:How To Change Default View In MVC 4 Web Application如何在 MVC 4 Web 应用程序中更改默认视图
【发布时间】:2017-10-15 21:36:07
【问题描述】:

默认情况下,Visual Studio 2017 中的 MVC 4 将 _Layout.cshtml 设置为所有页面的默认布局。我相信它在App_Start/RouteConfig.cs 中这样做:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

(索引设置为首页)

我仍然不确定 Index 如何获得 _Layout.cshtml。但是,如果我试图设置一个不同的视图——登录页面——作为主页,像这样呢?

我还试图去掉标题中的报告、帐户、设置和注销<li>'s,以便页面与上面的设计相匹配。我还需要一个里面有表格的容器。

我尝试在 /Home/Shared 中创建 _Login 视图,并将 App_Start/RouteConfig.cs 中的 "Index" 更改为 "Login"

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional }

但这给了我一个错误:

如何创建视图并将该视图设置为此 MVC 4 Web 应用程序的默认视图?谢谢

【问题讨论】:

  • 默认布局设置在Views/_ViewStart.cshtml Layout = "~/Views/Shared/_Layout.cshtml".
  • 哦,好吧。我确实在_ViewStart.cshtml 中设置了_Login.cshtml。我有_Login.cshtml 而不是_Layout.cshtml,但我仍然收到上述错误消息。我的_ViewStart.cshtml 看起来像这样:@{ Layout = "~/Views/Shared/_Login.cshtml"; }
  • 是不是需要为不同的视图设置不同的布局?
  • 您得到的错误似乎是因为在家庭控制器中找不到登录操作。
  • 你通常可以用一个布局做很多事情。但您始终可以在各个视图页面中覆盖默认的Layout = "~/Views/Shared/_LayoutLogin.cshtml"

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

你在 defaults 参数中看到的 action 是控制器方法的名称,而不是视图,所以你应该在 Home 控制器中创建一个名为 Login 的方法并创建关联的视图(在Login 方法中右键单击并选择添加视图)。然后它将作为默认主页。

defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional }

所以你的Home 控制器看起来像这样:

public class HomeController : Controller
{
    public IActionResult Login()
    {
        return View();
    }
    //other codes   
 }

另外,如果您不希望在登录页面中使用默认布局,您可以在登录页面顶部添加此布局

@{
    Layout = "";
}

【讨论】:

  • 这确实改变了默认主页的正文。那么我将如何摆脱标题中的(右侧)链接? i.imgur.com/zy070R2.png 即如何更改新默认视图的标题?
  • 它们在_Layout.cshtml 文件中。看这部分<div class="navbar navbar-inverse navbar-fixed-top">
  • 是的。那是因为_Layout.cshtml 是默认布局。如果您不喜欢它,可以按照其他人在他们的 cmets 中所说的那样更改它,我也会更新我的答案。
【解决方案2】:

您看到的错误似乎不是因为布局页面。

此错误是因为 Home 控制器中缺少登录操作。

你看,指定的默认值是Controlller="Home", Action="Login"
即编译器在 Home 控制器中查找 Login 操作。当它没有找到时,它会抛出这个错误!

您可以通过添加以下登录操作来摆脱它:

public ActionResult Login(string Uname, string Password)
{
    return View();
}

在家庭控制器中!那是问题中的错误。

这里是您的问题的解决方案。 您可以通过添加如下所示的剃刀代码为每个视图添加不同的布局,以指定视图的布局。

@{
   Layout = "~/Views/Shared/_Layout.cshtml";
                  //This is the path to the layout. You could change this to your custom layout's path.
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多