用视图呈现UI
视图可以不包含任何应用逻辑或者数据库检索代码,所有的应用逻辑都可以在controller中进行处理。

视图通过使用controller类在调用RenderView方法的时候提供视图相关数据对象呈现UI:

public void Categories()
{
    List< Category> categories = northwind.GetCategories();
    RenderView("Categories", categories);

禁止访问Views目录
为了在你的ASP.NET MVC WEB应用程序中添加额外的安全性,你可以直接阻止访问Views目录。添加如下的代码到你Views目录下的web.config中的system.web节下就可以了:

< authorization>
  < deny users="*"/>
< /authorization> 

ASPX视图页
ViewPage类型的视图页是Page类的一个实例。我们看一下下面的视图页:

using System;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Mvc; 

namespace MvcApplication.Views.Home
{
    public partial class Index : ViewPage< CompanyInfo>
    {
    }
}

它继承自ViewPage< T>,我们看一下继承关系:

using System;

namespace System.Web.Mvc
{
    public class ViewPage< TViewData> : ViewPage
    {
        public ViewPage();

public TViewData ViewData { get; }

protected internal override void SetViewData(object viewData);
    }
}

而ViewPage< T>又继承自ViewPage:

这里注意一下ViewPage提供的公共方法,经常要用到的。
而ViewPage还实现了一个IViewDataContainer的接口,这个接口里面只有一个属性,就是我们经常用的ViewData :

下面的示例演示了如何使用ViewData属性,这个属性有两中变异。如果你的View继承自System.Web.Mvc.ViewPage类,则ViewData属性是一个dictionary.这个属性提供一个索引器接收一个dictionay键.下面是继承自System.Web.Mvc.ViewPage类的示例:

< %@ Page Language="C#" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="MvcApplication5.Views.Home.About" %>
< html xmlns="http://www.w3.org/1999/xhtml">
< head id="Head1" runat="server">
  < title>ViewData Property - Dictionary Based< /title>
< /head>
< body>
  < div>
    < %="About " + ViewData["CompanyName"]%>
  < /div>
< /body>
< /html> 

当然,我们还可以使用一个强类型的ViewData属性.这个为数据从控制器传递到视图中提供更好的类型检测.下面的示例是使用强类型的ViewData,视图页是继承自ViewPage< T>的:

< %@ Page Language="C#" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="MvcApplication.Views.Billing.Account" %>
< head id="Head1" runat="server">
  < title>ViewData Property - Strongly Typed< /title>
< /head>
< body>
  < div>
    < %="About " + ViewData.CompanyName %>
  < /div>
< /body> 

设置视图数据

通常,你提供数据给视图来呈现.要呈现视图,你调用控制器中的RenderView方法.这里有两种途径来将数据从控制器传递到视图中.Controller类暴露一个ViewData的属性,它返回键大小写无关的IDictionay< string,object>类型.你可以分配索引值到这个数据字典中.看下面的示例:

public SampleController : Controller
{
    public void Welcome() 
    {
        ViewData["FirstName"] = "Joe";
        ViewData["LastName"] = "Healy";
        RenderView("Welcome");
    }

如果只是用一个视图名来调用RenderView方法,就像上面的示例所示,这个Controller对象的ViewData属性会被作为dictionary来传递给View.如果你希望使用一个强类型的ViewData属性,你可以忽略ViewData属性.作为代替,你创建一个你想传递到View中的对象,然后将它传递给RenderView方法.就如下面示例所示:

public class SampleViewData 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }


public SampleController : Controller 
{
    public void Welcome() {
        SampleViewData viewData = new SampleViewData();
        viewData.FirstName = "Joe";
        viewData.LastName = "Healy";
        RenderView("Welcome", viewData);
    }

在Actions方法之间传递状态

Action方法很可能必需传递数据到另外一个Action中,就好像当一个form提交的时候发生了错误,那样的话,用户应该被重定向到一个可以显示出错信息的页面中.
在Action方法调用控制器的RedirectToAction方法调用其他Action之前,Action方法可以设置Controller的TempData属性到任意一个对象.这个TempData属性值是保存在session中的.另外一个Action可以检查TempData属性并获取值来在它自己的视图中显示.TempData的值只是在一个请求到下一个请求中保留.
下面是示例演示了如何捕捉错误并重定向到一个使用原始数据的错误页中:

< form action="/App/InsertCustomer">
  < % if (ViewData.ErrorMessage != null) { %>
    The following error occurred while inserting the customer data:
    < br />
    < %= ViewData.ErrorMessage %>
    < br />
  < % } %> 

  First name: < input type="text" name="firstName"
      value="< %= ViewData.FirstName %>" />< br />
  Last name: < input type="text" name="lastName"
      value="< %= ViewData.LastName %>"  />< br /> 

    < input type="submit" value="Insert" />
< /form> 
Action间传递数据
public class InsertError {
    public string ErrorMessage { get; set; }
    public string OriginalFirstName { get; set; }
    public string OriginalLastName { get; set; }


// CustomersController 

public void InsertCustomer(string firstName, string lastName) {
    // Check for input errors.
    if (String.IsNullOrEmpty(firstName) ||  
            String.IsNullOrEmpty(lastName)) {
        TempData["error"] = new InsertError("Both names required", 
            firstName, lastName);
        RedirectToAction("NewCustomer");
        return;
    } 

    // No errors
    // 


public void NewCustomer() {
    InsertError err = TempData as InsertError;
    if (err != null) {
        // If there is error data from the previous action, display it.
        ViewData.FirstName = err.OriginalFirstName;
        ViewData.LastName = err.OriginalLastName;
        ViewData.ErrorMessage = err. ErrorMessage;
    } 

    // 
}

转载于:https://www.cnblogs.com/joeliu/archive/2008/06/22/1227580.html

ASP.NET MVC 学习: 视图(http://whx.tzgt.gov.cn/newOperate/html/1/12/123/12058.html)相关推荐

  1. Windows下动态内存分配方式http://whx.tzgt.gov.cn/newOperate/html/7/71/711/3938.html

    这里的"动态内存"包含以下两个方面的内容:   1.内存.这里的"内存"指的是进程的虚拟内存空间.在Win32环境下,每一个进程拥有独立的,大小为4G(0x00 ...

  2. ASP.NET MVC学习之控制器篇

    一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...

  3. (转)ASP.NET MVC 学习第一天

    天道酬勤0322 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅  | 管理 随笔:10 文章:0 评论:9 引用:0 ASP.NET MVC 学习第一天 今天开始第一天学习asp. ...

  4. ASP.NET MVC学习之路由篇(2)

    ASP.NET MVC学习之路由篇(2) 原文:ASP.NET MVC学习之路由篇(2) 继ASP.NET MVC学习之路由篇(1)后继续学习. 7.解决与物理路径的冲突 当发送一个请求至ASP.NE ...

  5. ASP.NET MVC学习资料 新增几个开源项目

    ASP.NET MVC学习资料 新增几个开源项目 ASP.NET MVC MSDN API:  System.Web.Mvc Namespace (暂无中文版):  http://msdn.micro ...

  6. asp.net MVC学习的一些总结

    起初认为视图,控制器,模型它们是完全没有耦合的,真正用了一段时间MVC发现错了. 但通过抽象让他们完全没有耦合,也不是不可能. 1.奇怪的连接地址 用MVC之前,一直认为页面必然访问某个文件.用了MV ...

  7. ASP.NET MVC #8211; 视图

    为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 部分 5:添加用于显示应用程序的视图. Views 文件夹 Views 文件夹存储的是与应用程序显示(用户界面)相关的文 ...

  8. ASP.NET MVC 5 - 视图

    2019独角兽企业重金招聘Python工程师标准>>> 在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成H ...

  9. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?

    起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...

最新文章

  1. IT行业热点商业模式随笔第七章——商业模式创新规律
  2. 哈夫曼编码和带权路径计算
  3. 在delphi中如何动态建立类的实例
  4. mysql的max case_MySQL -- 行转列 -- GROUP_CONCAT -- MAX(CASE WHEN THEN)
  5. 未来网络安全重塑,保障安全的会不会只有四五家?
  6. mysql .net2.0_MySQL和.Net2.0合营哄骗
  7. linux的鼠标右键老是建立文件夹,右键新建只有文件夹怎么办|右键只能新建文件夹解决方法-系统城...
  8. iOS动画——流光文字
  9. 命里有时终须有,命里无时莫强求
  10. 基于hi3531压缩YUV-D1 H264(sample_enc例子改写)
  11. springboot借助sftp将文件上传到远端的nginx服务器中,然后将文件路径存进数据库
  12. 百度影棒1刷成Android系统,百度影棒2S最简单的刷机方法
  13. 小白也能看懂的零知识证明与zk-SNARKs
  14. IBM创磁带存储新纪录
  15. Data Simulator+DB Fly概述
  16. 告别 Google Reader,告别一个时代!
  17. https生成根证书、服务证书
  18. spring-data-elasticsearch使用Sort排序时Please use a keyword field instead. ……异常解决
  19. “人文素养老师”——马小平老师
  20. 文明-根达亚文明:根达亚文明

热门文章

  1. 用CSS实现一个聚光灯效果
  2. 彻底对一个男人失望的瞬间
  3. java垃圾回收机制分类整理
  4. ps界面为啥突然变大了_photoshop 2020来了,ps进入智能修图时代,新特性太逆天了...
  5. php繁体网站配置,php网页是繁体字怎么办
  6. geek_2013年How-To Geek的节日礼物指南:男孩,女孩,极客和有情机器人的书籍
  7. Python第三方库之MedPy
  8. matlab tic tac toe,详解Tic-Tac-Toe人工智能实现
  9. 源码网站合集[细选过的][转贴]
  10. Java spring基于XML的aop配置实现