MVC中对VIEW的理解,通过前台BaseController来理解面向对象

首先它是一个具有返回类型为ViewResult的一个方法,也就是说,我们可以通过返回ViewResult对象来代替View()方法,下面的操作是合法的
     ViewData.Model = model;
            return new ViewResult
            {
                ViewName = viewName,
                MasterName = this.MasterFile,
                ViewData = ViewData,
                TempData = TempData
            };
    它在一般情况下等同于return view(model),这是微软为我们封装好的方法,让我们省去了不少代码,它的view(object model)方法原型可能是这样的
        protected internal ViewResult View(object model)
        {
          ViewData.Model = model;
            return new ViewResult
            {
                ViewName = viewName,
                MasterName = this.MasterFile,
                ViewData = ViewData,
                TempData = TempData
            };
        }
        呵呵,我们有时,希望在后台通过调用masterfile的方法来动态改变模版页,可以这样来实现
      public abstract class BaseController : Controller
       {
        /// <summary>
        /// 根据用户角色,返回它的模版页
        /// 子类可以直接访问本属性
        /// </summary>
        protected string MasterFile
        {
            get
            {
                return UIHelper.GetMasterPage(Tsingda.XXB.Common.WebSession.UserRole);
            }
        }
        /// <summary>
        /// 重写controller的View方法,使它可以根据用户角色应用指定视图
        /// </summary>
        protected new ViewResult View(string viewName, object model)
        {
            ViewData.Model = model;
            return new ViewResult
            {
                ViewName = viewName,
                MasterName = this.MasterFile,
                ViewData = ViewData,
                TempData = TempData
            };
        }
 }

   /// <summary>
    /// 前台通用方法
    /// </summary>
    public partial class UIHelper
    {
        /// <summary>
        /// 根据用户角色,得到指定的模板
        /// <param name="role"></param>
        /// <returns></returns>
        public static string GetMasterPage(Tsingda.XXB.Common.CustomEnum.UserRole role)
        {
            string masterPageFile = "";
            switch (role)
            {
                case Common.CustomEnum.UserRole.Student:
                    masterPageFile = "~/Views/Shared/StudentCenter.Master";
                    break;
                case Common.CustomEnum.UserRole.Teacher:
                    masterPageFile = "~/Views/Shared/TeacherCenter.Master";
                    break;
                case Common.CustomEnum.UserRole.Parents:
                    masterPageFile = "~/Views/Shared/ParentCenter.Master";
                    break;
                case Common.CustomEnum.UserRole.Agents:
                    break;
                case Common.CustomEnum.UserRole.Visitor:
                    masterPageFile = "~/Views/Shared/StudentCenter.Master";
                    break;
            }
            return masterPageFile;
        }
}

而在同一个controller中,如果你的View视图不希望去应用任何模板页,可以写这样一个方法,呵呵
      /// <summary>
        /// 返回没有母板页的视图
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        protected ViewResult ViewNotMasterFile(object model)
        {
            ViewData.Model = model;
            return new ViewResult
            {
                MasterName = string.Empty,
                ViewData = ViewData,
                TempData = TempData
            };
        }

呵呵,多么灵活法,(因为ASCX视图不能有母板页的,呵呵)

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVC中对VIEW的理解,通过前台BaseController来理解面向对象,如需转载请自行联系原博主。

时间: 2024-10-28 10:52:50

MVC中对VIEW的理解,通过前台BaseController来理解面向对象的相关文章

MVC中当VIEW出现dropdownlist时,在Model视图模块中如何去设置更合理

对于在页面上显示的文本框信息,我们在视图模块中定义成string就可以了,但如果是列表框呢,我们应该如何去定义更合理些呢? 起初,我使用的方法是ViewData,然后在页面中再去强类型一下,如 <%= Html.DropDownList("Type1",ViewData["Type"])%> 这种方法破坏了对象的完整性,使它脱离了与对象的关系,我在做程序开发时,提供下面这种写法: <%= Html.DropDownList("Type1&

在ASP.NET MVC 中使用ActiveReports报表控件

随着MVC模式的广泛运用,对Web应用系统的开发带来了巨大的影响,我们好像又回到了原来的ASP时代,视乎这是一种后退而不是一种进步,不过MVC模式给我们带来的影响不仅限于我们所看到的这一点..MVC看上去是使用原来的HTML页面来呈现内容,但其核心是 .NET路由引擎,通过.NET路由引擎使得MVC设计模式更容易被理解,更方便开发人员所使用,而且不必担心视图状态以及页面的生命周期.  ActiveReports最初是为传统的 .NET Web Forms 系统所设计,但也可用于MVC模式的系统中

ASP.NET中MVC从后台控制器传递数据到前台视图的方式_实用技巧

本文实例讲述了ASP.NET中MVC从后台控制器传递数据到前台视图的方式.分享给大家供大家参考.具体分析如下: 数据存储模型Model: 复制代码 代码如下: public class CalendarEvent { public string id { get; set; } public DateTime start { get; set; } public DateTime end { get; set; } public string backgroundColor { get; set

新闻-再mvc中前台页面怎样展示不同的文档

问题描述 再mvc中前台页面怎样展示不同的文档 再发布新闻的内容时,怎样在后台后台将不同的文档展示再前台,但文档的格式不变 解决方案 用flex pager,只要你的文档可以打印,就可以显示,csdn的下载预览就是用的这个 http://www.soaspx.com/dotnet/asp.net/tech/tech_20130304_10126.html

深入理解MVC中的时间js格式化_javascript技巧

记录下我遇到的一个,MVC中post请求返回一个JSON字符串,其中包含数据库中的时间格式(如:/Date(10000000000)/),不知道怎么处理. 百度的方法都不适用,经自己研究,做成了一个Jquery插件,希望对大家有所帮助. 插件源代码: (function ($) { /格式化JSON返回的日期类型为自己定义的格式:如:yyyy-MM-dd hh:mm:ss dtstr:JSON返回的日期"/Date(10000000000)/" * fmt:自定义的格式,如:yyyy-

ASP.NET MVC中使用Unity Ioc Container

在MVC中,控制器依赖于模型对数据进行处理,也可以说执行业务逻辑.我们可以使用依赖注入(DI)在控制层分离模型层,这边要用到Repository模式,在领域驱动设计(DDD)中,Repository翻译为仓储,顾名思义,就是储存东西的仓库,可以理解为一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合.使用依赖注入(DI)就是对Repository进行管理,用于解决它与控制器之间耦合度问题,下面我们一步一步做一个简单示例. 安装Unity 首先我们需要新建一个UnityMVCDemo项目

Knockout获取数组元素索引的2种方法,在MVC中实现

原文:Knockout获取数组元素索引的2种方法,在MVC中实现 在遍历数组.集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法.   假设有这样的一个模型: namespace UseIndex.Models { public class Student { public int Id { get; set; } public string Name { get; set; } } }   在HomeController中,先模拟一个Student的集合,在投影出

在ASP.NET MVC中如何使用异步控制器

在ASP.NET MVC中使用异步操作的时候,我有这么几个关注点.异步操作何时提高我应用的性能,什么时候没改善?     在ASP.NET MVC中到处使用异步操作真的好吗?    对于可等待的(awaitable)方法: 当查询数据库时(通过EF/BHibernate/其他的ORM)应该使用async/await关键字吗?    在一个单独的操作方法中,异步地查询数据库可以使用await关键字多少次? 当一个action必须执行多个独立的长期运行的操作时,异步action方法是很有用的. 假设

asp.net mvc中Controller在 fckeditor传值解决方法

环境说明: 软件环境:asp教程.net mvc3   +   vs2010 系统环境:windows xp sp3 浏览器: ie8(为了世界的和平,为了社会的稳定,为了不再被大家鄙视.我已痛改前非放弃ie6!) 上篇文章我们谈到了fckeditor在asp.net教程 mvc中的配置及其前台的方法. 我们在controller中接收view的数据情况是这样的 [httppost]         public actionresult index(formcollection form)