RenderPartial: No overload for method 'Write' takes 0 arguments

 

以下方法调用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");

相关文章
相关标签/搜索