背景: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() 参考

ASP.NET MVC RenderPartial和Partial的区别的更多相关文章

  1. 简述关于ASP.NET MVC与.NET CORE 的区别

    简述关于ASP.NET MVC与.NET CORE的区别1.关于ASP.NET 关于MVC刚开始接触这个技术的时候我经常不理解他们的名字,我相信许多学ASP.NET开发人员开始接触MVC应该也和我一样 ...

  2. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】

    Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相 ...

  3. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  4. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  5. [转]Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    本文转自:http://www.cnblogs.com/gesenkof99/archive/2013/06/03/3115052.html Partial 和RenderPartial:这两个的性质 ...

  6. asp.net mvc 部分视图加载区别

    ASP.NET MVC 部分视图   ASP.NET(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. [部分视图] ASP.NET MVC 里的部分视图,相当于 Web Form 里的 ...

  7. .NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别

    经常,会有一些人搞不清楚.NET和c#和ASP.NET这三者之间的关系,她们都是什么呢?他们之间有什么关系呢?总结一下 首先:什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.N ...

  8. .NET、C#和ASP.NET、ASP.NET MVC四者之间的区别

    什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,在这个平台下可以用不同的语言进行开发,因为.NET是跨语 ...

  9. 转载ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别

    对这四个的区别做一个总结,清理一下思路,方便以后使用: 1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:     @Ht ...

随机推荐

  1. Spark Rdd coalesce()方法和repartition()方法

    在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...

  2. navicat注册码

    1. navicat for mysql 9 注册码   :::   NAVL-EHNC-7N7P-W6GM  2. navicat for mysql 9.17中文版 注册码 :: NAVM-5ZC ...

  3. java使用tomcat7的maven插件发布到服务器

    服务器容器使用tomcat7的maven插件,使用该插件不需要使用tomcat服务器.以下示例均以paycore项目为例. 一.使用tomcat7-maven-plugin 首先在主pom(payco ...

  4. MySQL性能优化

    当今数据库的操作越来越成为整个应用的性能瓶颈,特别是Web应用更加明显.当我们设计数据库和对数据库操作时,都要考虑到性能. 1.优化查询语句,方便查询缓存 大多数MySQL服务器都开启了查询缓存,这是 ...

  5. c# ros

    class MK { Stream connection; TcpClient con; public MK(string ip) { con = new TcpClient(); con.Conne ...

  6. C# 常用代码

    学习备忘 1.判断程序是否运行 static void Main() { bool canCreateNew; System.Threading.Mutex myownmutex = new Syst ...

  7. a版本十日冲刺总汇

    DAY ONE: http://www.cnblogs.com/aruba/p/6041243.html 2016-11-08 DAY TWO: http://www.cnblogs.com/arub ...

  8. 问题记录:JavaFx 鼠标滑轮滚动事件监听!

    问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...

  9. excellent cushioning and also vitality go back with this boot

    The particular manufactured fine mesh higher almost addresses the complete boot. Here is the sort of ...

  10. vector it->和*it

    //每次写代码总是被迭代器的iter->和*iter弄晕,主要是被protobuf弄晕了 #include <vector> struct test{ test(){ memset( ...