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


  • 相关阅读:
    URL传递中文:Server.UrlEncode与Server.UrlDecode
    面向对象的封装性和多态性
    C#虚基类继承与接口的区别
    C# String与string的区别
    C# 索引器的使用
    ASP.NET 页面之间传递值的几种方式
    SQL Server中的游标CURSOR
    OpenLayers中的图层(转载)
    OpenLayers介绍和第一个例子(转载)
    SQL笔记-第七章,表连接
  • 原文地址:https://www.cnblogs.com/lori/p/2381196.html
Copyright © 2020-2023  润新知