您的位置:首页 > 其它

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

2012-03-05 23:55 429 查看
在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这个扩展方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: