ASP.NET MVC RenderPartial和Partial的区别

 

背景:ASP.NET MVC 4.0

 Html.Partial("_ProjectDetail")  与 Html.RenderPartial("_Xxx") 使用效果有些相似, 都可以用在父级模板中,以实现MVC页面模块化或模块页面复用的效果. 发现Html.Partial("_Xxx")发现往往使用在_Layout.chtml这样的布局模板文件中.

@Html.Partial(....) 

Html.Partial()非常常用,往往用在_Layout.cshtml中,用于插入"子模板",例如 @Html.Partial("_TopNavbar") ,直接就在chmtl模板页中这么用,无需用大括号{}包住。

public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName)
{
    return htmlHelper.Partial(partialViewName, null, htmlHelper.ViewData); } public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData) { using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture)) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, writer, ViewEngines.Engines); return MvcHtmlString.Create(writer.ToString()); } }

 请注意, Partial方法将结果输出到临时变量StringWriter

@{ Html.RenderPartial(...); }

public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName) { htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines); }

上面是@{ Html.RenderPartial("_ArticleTable"); } RederPartial对应的方法声明

(1).此方法内调用 htmlHelper.ViewContext.Writer 进行输出, 通俗的理解, Html.RenderPartial方法是直接绚烂模板, 将结果直接Reponse到浏览器, 所以在视图语法中需要用大括号{}”接住”RenderPartial方法的返回值. 所以又有人就这样说:RenderXXX的方法返回值是void, 在方法内部进行输出;

(2).强调一点, RenderPartial带"计算"功能, 可以直接"拿到"父View中传入的model,即不用单独为RenderPartial传入model, 这点在实际开发也能体会到.

(3).Html.RenderPartial在Asp.net Mvc中是用来调用PartialView的。PartialView基本上就是Asp.net Webform中的UserControl。调用也很简单,只要在View中把PartialView的名字作为参数传递就可以。 Html.RenderPartial("YourPartialView", YourData) ,YourData是一个可选的参数。如果有,那么YourData会被赋给PartialView中的Model。如果没有,那么调用 RenderPartial的View中的Mode和ViewData会被传递给PartialView。也就是说,PartialView的数据来自于调用的View。

例子参考

Project/Detail.cshtml 中 @{ Html.RenderPartial("_ProjectDetail");}

说明:
1).Project/Detail.cshtml是项目详细页模板
2).在Views\Shared中创建复用的子模板_ProjectDetail.cshtml,发现它是可以拿到在ProjectController中在Detail()方法中传入的值,在coding时需在在子模板_ProjectDetail.cshtml中引入需要的数据

_ProjectDetail.cshtml 中
@{
    List<List<SelectListItem>> loadDDL = ViewBag.ddlStrList as List<List<SelectListItem>>;
}
public ActionResult Detail()//对应的
{
    ViewBag.ddlStrList = CommonController.GetSelectListItemByFang();//加载下拉框选项
    EnumDescription[] payTypeItemOption = EnumDescription.GetFieldTexts(typeof(Enumerator.PayType));//支付类型
    ViewBag.PayType = new SelectList(payTypeItemOption, "EnumValue", "CNText");
    return View();
}

实例用法参考

区别  Html.RenderAction() 参考 

转载于:https://www.cnblogs.com/zhuji/p/5828335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值