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这个扩展方法。


  • 相关阅读:
    【嵌入式】arm-linux-gcc/ld/objcopy/objdump参数概述
    【Java】Java复习笔记-第四部分
    【C/C++】C语言复习笔记-17种小算法-解决实际问题
    【Java】Java复习笔记-三大排序算法,堆栈队列,生成无重复的随机数列
    【Java】Java复习笔记-第三部分
    【教程】ubuntu下安装NFS服务器
    【Java】Java复习笔记-第二部分
    【Java】Java复习笔记-第一部分
    【教程】ubuntu下安装samba服务器
    【C/C++】一道试题,深入理解数组和指针
  • 原文地址:https://www.cnblogs.com/lori/p/2381196.html
Copyright © 2011-2022 走看看