zoukankan      html  css  js  c++  java
  • 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这个扩展方法。


  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/lori/p/2381196.html
Copyright © 2011-2022 走看看