Asp.Net MVC 视图(View)实现 1
2010-02-25 13:34
423 查看
核心概念
将控制器逻辑controller 和视图展示view 分离,有助清晰隔离应用程序代码和用户界面展示的脚本。更方便地对应用程序逻辑进行单元测试,而不需要 UI 展示逻辑,修改 UI 脚本,而不会更改应用程序的代码,从而分离了开发人员和用户界面设计人员在项目中的合作。虽然在在逻辑方法action 中可以写代码拼装 HTML,通过 Response.Write() 方法返回给客户端,但是这个方法不好。应该在 action 方法中做业务和数据逻辑,并将相关的数据传递给单独的视图(view)模板,view 负责生成 HTML 展示。view 模板好似Asp/PHP 的网页文件,在其中嵌入了脚本并从后台获得所需要的数据。
看一下默认生成的代码Controller,其中重要的地方已经添加了下划线
using System.Web.Mvc; namespace MvcApplication1.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); //Controller 基类的 View()方法 } public ActionResult About() { return View(); } } }
第二种方法,改进View方法,来包含参数
public ActionResult Index() {
var users = GetUsers();
if (users == null)
{
return View("NotFound");
}
else
{
return View("Index", users);
}
}
上面代码的View 的第一个参数是view 模板文件,指定用来生成结果的View文件。第二个参数是 model 对象,包含了 view 模板生成 HTML 响应所需要的数据。
基于上面的控制Controller来演示 View 的建立和数据传递
新建或者转到一个View 模板为我们提供了Action 右键菜单,在不同的Action 方法当当中,右键菜单下选择新建,或者 转到 都会根据Action 的名字来操作比如右键About 选择 Add Veiw,会弹出下面的新建试图对话框
如上图,我们可选择创建一个什么样的View,以及他的MasterPage 是那个,并包含在模板页的位置
默认设置建立一个Message页面,我们会看到一下标记,其中有两个内容块,
第一块允许我们定制 HTML页面的标题,
第二块允许我们定制 HTML 页面的主要内容(main content)。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Message </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Message</h2> </asp:Content>
如果选择 Create a strongly-typed View(创建强类型视图)复选框,并从下拉列表框中选择从Controller 传递到 View 的 Model 模型类型。我们可以传递Users对象
上面的View Data Class 内容就是return View("Index", users); 的第二个参数的类型
默认VS 引擎使用.NET 反射,查询模型类的所有公共属性,并自动根据每一个字段的类型,添加相应的内容到视图模板中。
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
Users
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>Users</h2>
<fieldset>
<legend>Fields</legend>
<p>
UserID:
<%=Html.Encode(Model.UserID) %>
</p>
<p>
UserName:
<%=Html.Encode(Model.UserName) %>
</p>
在视图模板呈现时,<% %> 代码块就会执行,<%= %> 代码块执行其中的代码,使用从Controller传递过来的model参数,并呈现结果到视图的输出中展示。
相关文章推荐
- Asp.Net MVC 视图(View)实现 2
- Asp.Net MVC 视图(View)实现 2
- Asp.Net MVC 视图(View)实现 1
- ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
- Asp.Net MVC 视图(View)实现 1
- ASP.NET MVC(模型(Model),视图(View)和控制Controller)实践:实现身份验证权限管理
- Asp.Net MVC 视图(View)实现 2
- 视图(View) – ASP.NET MVC 4 系列
- Asp.net MVC 自定义ViewEngine的简单实现
- ASP.NET MVC自定义视图引擎ViewEngine 创建Model的专属视图
- ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
- Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图
- asp.net mvc 用自定义的RazorViewEngine实现主题的自由切换遇到的问题!
- Asp.net mvc 3.0入门教程之三————视图View
- [导入]ASP.NET MVC框架开发系列课程(4):可替换的视图(View).zip(18.32 MB)
- ASP.NET MVC :实现我们自己的视图引擎
- 利用Razor在ASP.NET MVC中的实现,自定义视图引擎框架(2)
- 一个窗口里包含一个iframe,点击iframe内的submit按钮,返回的视图总是显示在iframe中,我想要的效果是点击按钮后返回的视图是在浏览器窗口中...?asp.net mvc 的action中,不用js怎么实现??????????