我是MVC的新手,我遇到了一个问题,如何将控制器“HelloWorld”连接到viewMasterPage“Index”..如果我希望我的所有页面都包含组件,我需要使用viewMasterPage为所有意见?
修改 我正在使用MVC3和Razor作为视图引擎
答案 0 :(得分:1)
这样做。我假设您正在使用Web表单视图引擎。
您的母版页是Views / Shared文件夹中的site.aspx文件。这是Views / HelloWorld文件夹中的索引文件。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Bla bla bla..
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index of HelloWord</h2>
<%:ViewData["Message"]%>
</asp:Content>
这是控制器文件夹中的HelloWorldController.cs文件应该是什么样的;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace App.Controllers {
public class HelloWorldController : Controller {
public ActionResult Index() {
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
}
}
编辑:以下是此版本的剃刀版本;
您的母版页是Views / Shared文件夹中的_layout.cshtml文件。这是Views / HelloWorld文件夹中的index.cshtml文件。
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@ViewBag.Message
</p>
这里是_ViewStart.cshtml文件在Views文件夹中的样子;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
这是控制器文件夹中的HelloWorldController.cs文件应该是什么样的;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace App.Controllers {
public class HelloWorldController : Controller {
public ActionResult Index() {
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
}
注意:我假设您的路线是Visual Studio在您创建新的MVC互联网应用程序时为您创建的默认路线
答案 1 :(得分:0)
母版页的工作方式与模板文件类似,大多数部分都是静态的,您只需更改几个地方即可显示所需的结果。不同视图页面的不同变化部分由视图引擎动态生成。生成动态内容的动作称为“渲染”。
使用Razor View Engine时,您需要确定哪些部分是静态的以及哪些部分正在发生变化。对于变化的部分,除了魔术召唤之外你不会写任何东西@RenderBody()
对于在某些视图中需要但在其他视图中不需要的部件。您使用@RenderSection("sectionName", false)
。
这是一个示例_layout.cshtml文件。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
... your style sheet files ...
</head>
<body>
... shared components...
@RenderBody()
...I like to put the java script files to the end...
@RenderSection("extraScripts", required: false)
</body>
</html>
然后在每个共享相同组件的视图中添加
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
在文件的开头。您的视图文件的其余部分将被提取
@RenderBody()
致电。如果要为视图添加一些自定义脚本,请按
@section extraScripts{
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
}
您为此微粒页面添加的额外脚本将在运行时呈现到您的结果页面。