MVC中分部视图与扩展方法对页面设计的贡献

简介:

在MVC架构中,我们将一些通用模块通常写成一个“分部视图”或者HtmlHelper对象的“扩展方法”,这样在调用时方便,页面结构清晰,维护性高。

具体如果用分部视图实现,可能是这样:

<%@ControlLanguage="C#"Inherits="System.Web.Mvc.ViewUserControl<SelectList>"%> 
<%
=Html.DropDownList("Category",Model) %>

它对应的action是这样:

/// <summary>
   /// 通¨用?功|能ü的?分?部?视ó图?
   /// </summary>
   public class CommonUCController : Controller
   {
       Data.IRepository _iRepository = null;
       public CommonUCController()
       {
           _iRepository = new Data.DataRepository();
       }
       /// <summary>
       /// 分?类à的?列D表í框ò
       /// </summary>
       /// <param name="cateID"></param>
       /// <returns></returns>
       public ActionResult CategoryForSelectList(int? cateID)
       {
           SelectList model = new SelectList(_iRepository.GetModel<Entity.Category>(), "ID", "Name");
           return View(model);
       }

   }

一般的,我们为它的参数设为可空整形,当其值为null时,表示返回默认对象,当不为NULL时,表示对某个集合对象进行选中项的操作。

在需要它的地方这样调用 :

 <%Html.RenderAction("CategoryForSelectList", "CommonUC"); %>

如果用扩展依法来实现这个功能,它会更精灵,对调用方的程序员更简捷,对制作方程序员要求高些,它的扩展性更加强:

/// <summary>
        /// 生ú成é分?类à下?拉-列D表í框ò,选?中D指?定¨的?项?
        /// </summary>
        /// <param name="html"></param>
        /// <param name="selectedValue"></param>
        /// <returns></returns>
        public static MvcHtmlString SelectList_Category(this HtmlHelper html, long selectedValue)
        {
            Data.IRepository _iRepository = new Data.DataRepository();
            StringBuilder sb = new StringBuilder();
            sb.Append("<select name='Category' id='Category'>");
            foreach (var i in _iRepository.GetModel<Category>())
            {
                if (i.ID == selectedValue && selectedValue != 0)
                    sb.AppendFormat("<option value='{0}' selected='selected'>{1}</option>", i.ID, i.Name);
                else
                    sb.AppendFormat("<option value='{0}'>{1}</option>", i.ID, i.Name);
            }
            sb.Append("</select>");
            return MvcHtmlString.Create(sb.ToString());
        }
        /// <summary>
        /// 生ú成é分?类à下?拉-列D表í框ò
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static MvcHtmlString SelectList_Category(this HtmlHelper html)
        {
            return SelectList_Category(html, 0);
        }

它的调用可能是这样:

 <%=Html.SelectList_Category() %>
我们从代码中可以看到,这个扩展方法其实是对ViewPage页面类上的HtmlHelper对象进行的扩展,它的对象名称是Html,所以在继承了ViewPage或者ViewUserControl的页面中,都可以使用SelectList_Category这个扩展方法。

本文转自博客园张占岭(仓储大叔)的博客,原文链接: MVC中分部视图与扩展方法对页面设计的贡献,如需转载请自行联系原博主。
目录
相关文章
|
6月前
|
设计模式 存储 前端开发
MVC(模型-视图-控制器)是一种在Web应用程序开发中广泛使用的软件设计模式
【5月更文挑战第12天】MVC模式是Web应用开发中的常见设计模式,将逻辑、数据和界面分离,提升代码可维护性和重用性。模型处理数据逻辑,视图展示数据,控制器协调用户输入与模型视图交互。优点包括代码分离、易维护、可扩展和组件重用,促进高效灵活的开发。
59 2
|
XML 缓存 前端开发
Spring MVC视图解析器
Spring MVC视图解析器
96 1
|
6月前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
91 3
|
6月前
|
缓存 前端开发 Java
视图映射掌握:解析Spring MVC视图解析器的全方位指南
视图映射掌握:解析Spring MVC视图解析器的全方位指南
126 1
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新4
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新4
57 1
|
6月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
51 0
|
11月前
|
JSON 运维 前端开发
Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例
Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新2
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新2
40 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新1
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新1
44 0