`

ASP.NET MVC 学习: 视图

阅读更多

用视图呈现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:

image

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

image

下面的示例演示了如何使用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;
    }
 

    
//  
}

注:本文参考自:
http://quickstarts.asp.net/3-5-extensions/mvc/MVCViews.aspx

分享到:
评论

相关推荐

    asp.net mvc 分部视图的基本使用

    在ASP.NET MVC中,分部视图(Partial View)是一种强大的功能,它允许开发者将用户界面拆分为可重用的部分,以提高代码的可维护性和复用性。本篇文章将详细探讨分部视图的三种基本使用方式,并通过实例进行讲解。 1...

    ASP.NET MVC Porject: MyFiance

    【ASP.NET MVC项目:MyFinance】是一个基于ASP.NET MVC3框架构建的...在深入研究该项目时,我们可以学习到如何利用ASP.NET MVC的架构优势,以及如何通过IoC和Entity Framework来提升应用程序的灵活性和数据处理能力。

    ASP.NET MVC 5入门指南(中文PDF+源码)

    ASP.NET MVC 5 - 视图 4. ASP.NET MVC 5 - 将数据从控制器传递给视图 5. ASP.NET MVC 5 - 添加一个模型 6. ASP.NET MVC 5 - 创建连接字符串并使用SQL Server LocalDB 7. ASP.NET MVC 5 - 从控制器访问数据模型 8. ...

    asp.net MVC4 CMS

    ASP.NET MVC4 CMS 是一个基于微软的ASP.NET MVC4框架构建的内容管理系统,它提供了一种高效、可扩展...通过深入研究其源代码,开发者可以学习到如何构建高效、可扩展的Web应用,并提升在ASP.NET MVC平台上的开发技能。

    asp.net mvc 示例项目

    ASP.NET MVC 是微软提供的一种基于模型-视图-控制器(Model-View-Controller)模式的Web应用程序开发框架。它允许开发者使用HTML、CSS和JavaScript构建动态、数据驱动的Web应用,同时提供了强大的测试支持和对现有...

    基于ASP.NET MVC项目实例

    为了理解这个基于ASP.NET MVC的项目,你可以按照以下步骤进行学习: - **了解基本概念**:首先,你需要熟悉MVC模式的基本原理,以及ASP.NET MVC框架的关键组件。 - **安装环境**:确保你已安装了Visual Studio,并...

    Pro ASP.NET MVC 5 (精通ASP.NET MVC5框架) 中文+英文+配套源代码

    ASP.NET MVC 5 是 Microsoft 推出的一款用于构建可伸缩、高性能的 Web 应用程序的框架,它基于模型-视图-控制器(MVC)设计模式,结合了ASP.NET Web Forms 和 ASP.NET Web API 的优势,提供了更现代的开发体验。...

    ASP.NET MVC项目源代码设计资料

    总的来说,这个ASP.NET MVC项目源代码设计资料是学习和深入理解MVC架构、ASP.NET MVC框架以及相关开发实践的理想资源。通过探索提供的文件,开发者不仅可以掌握MVC的核心概念,还能学习到实际项目开发中的最佳实践,...

    ASP.NET MVC5

    学习ASP.NET MVC5,开发者可以掌握Web应用程序的高级开发技巧,包括如何组织项目结构、如何处理用户输入、如何进行数据库操作、如何实现用户认证和授权,以及如何调试和测试代码。"J.T.ASP.NET MVC 5.pdf"这个文件很...

    Asp.Net MVC案例教程

    Asp.Net MVC是一种基于模型-视图-控制器(Model-View-Controller)设计模式的Web应用程序开发框架。它由微软公司推出,旨在...通过学习这些案例,开发者可以逐步掌握Asp.Net MVC的精髓,从而高效地构建现代Web应用。

    ASP.NET MVC 项目集合.zip

    在这个"ASP.NET MVC 项目集合.zip"压缩包中,可能包含了多个ASP.NET MVC项目的源代码,这对于学习和理解ASP.NET MVC的开发实践非常有帮助。下面,我们将深入探讨ASP.NET MVC的关键概念和技术。 1. **模型(Model)*...

    ASP.NET MVC4

    学习ASP.NET MVC4,你需要理解MVC模式的基本概念,掌握控制器、视图和模型的创建及交互,同时熟悉使用Razor视图引擎编写视图。此外,对于Web API、移动支持以及性能优化的相关特性也应有深入理解。通过阅读提供的...

    ASP.NET MVC5 编程实战.pdf

    ASP.NET MVC5 是微软开发的一款用于构建Web应用程序的框架,它结合了模型-视图-控制器(MVC)设计模式、ASP.NET Web Forms组件以及Web API功能,为开发者提供了更灵活、可测试的Web开发解决方案。这本书《ASP.NET ...

    Asp.net Mvc官方源代码

    通过研究ASP.NET MVC的官方源代码,开发者不仅可以深入了解MVC模式的实现细节,还能学习到最佳实践,提升Web应用的开发效率和质量。源代码的阅读和学习对于深入理解Web开发的底层机制至关重要,尤其是对于那些希望...

    asp.net mvc博客Blog源码

    在本“asp.net mvc博客Blog源码”项目中,我们可以深入学习和理解ASP.NET MVC的核心概念和技术。 首先,我们要了解ASP.NET MVC的基本架构。它遵循模型-视图-控制器(MVC)设计模式,将应用逻辑分为三个主要组件:...

    【全网首发】ASP.NET MVC4开发指南(附带源码)

    这个"ASP.NET MVC4开发指南"提供了一套全面的学习资源,旨在帮助开发者掌握这一强大的Web开发技术。 MVC(Model-View-Controller)模式是ASP.NET MVC4的核心设计原则,它将应用程序分为三个主要部分:模型(Model)...

    ASP.NET MVC 5 网站开发之美

    在这个标题为“ASP.NET MVC 5 网站开发之美”的资源中,我们可以期待深入学习如何利用这个框架创建高质量的Web应用。 1. **MVC设计模式**:MVC模式是软件工程中的一种设计模式,它将应用程序分为三个主要部分:模型...

    ASP.NET MVC4 Web编程

    学习ASP.NET MVC4 Web编程,你需要掌握C#语言、.NET Framework基础、HTML、CSS和JavaScript等前端技术,以及MVC设计模式的理解。通过阅读“ASP.NET MVC4 Web编程(jb51.net).pdf”这样的资源,你可以深入理解这些概念...

    AngularJS开发ASP.NET MVC

    ### AngularJS 开发 ASP.NET MVC #### 知识点概览 - **AngularJS与ASP.NET MVC结合的优势** - **AngularJS的特点与优势** - **AngularJS的基本概念(如数据绑定、指令等)** - **如何在ASP.NET MVC项目中引入...

    ASP.NET MVC开发实战超完整源码

    在本"ASP.NET MVC开发实战超完整源码"中,我们可以深入理解并学习到以下几个关键知识点: 1. **MVC模式**:MVC设计模式是软件工程中的经典模式,将应用分为模型(Model)、视图(View)和控制器(Controller)三个...

Global site tag (gtag.js) - Google Analytics