以下方法调用RenderPartial:html
报“No overload for method 'Write' takes 0 arguments”的错误;spa
@if (@Model != null && @Model.ProductBaseInfo != null)code
}
else
{
@Html.Partial("PartialView/_ProductNotFound")
}htm
@if (@Model != null && @Model.ProductBaseInfo != null) { } else { @{Html.RenderPartial("PartialView/_ProductNotFound");} }
改成下面代码后错误消失:blog
@if (@Model != null && @Model.ProductBaseInfo != null) { } else { @Html.Partial("PartialView/_ProductNotFound") }
网上找了一下资料:http://www.cnblogs.com/meen/p/3145696.htmlget
下面的第一条应该解释了缘由:RenderPartial和@Html.Partial一种是直接输出Html,一种是在内部输出(RenderPartial),因此RenderPartial没法直接生成Html。it
一、带有Render的方法返回值是void,在方法内部进行输出;不带的返回值类型为MvcHtmlString,因此只能这样使用:
@Html.Partial 对应 @{Html.RenderPartial(....);}
@Html.Action 对应 @{Html.RenderAction(....);}io
二、Action、RenderAction加载方法的视图,执行Controller → Model → View的顺序,而后把产生的页面带回到原来的View中再回传。而Partial、RenderPartial直接加载视图文件内容class
3. Html.Partial能够直接提供用户控件名做为参数,而Html.Action须要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。登录
四、对于简单的没有任何逻辑的用户控件,推荐使用Html.Partial;对于须要设置一些Model的用户控件,推荐使用Html.Action。固然,有Model数据也是可使用Html.Partial方法的,能够看方法的重载。
五、使用Html.Action有个好处,就是能够根据不一样的场景选择不一样的用户控件。好比:
@Html.Action("UserInfoControl")
在对应的UserInfoControl这个Action中,在用户未登陆的时候,能够retun PartialView("LogOnUserControl");登陆后,能够retun PartialView("UserInfoControl");