2013-11-10 66 views
5

我使用MVC 4,想整理一下我的看法了一点,所以决定创建多个局部视图和渲染过程中把他们聚在一起。MVC4使用嵌套@ Html.RenderPartial()抛出编译器错误信息:CS1502

这个工作原理当正在呈现的视图有少数@Html.RenderPartial('path\to\my\partialView.cshtml')但如果这个partialView.cshtml反过来有其他@Html.RenderPartial('path\to\my\otherPartialView.cshtml')里面定义的失败。

我得到这样的错误使用任何的RenderPartial或部分方法

error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments 
error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult' 

是否有MVC4的方式,我们可以将整理我的大视标记文件?即试图用其他部分视图渐进地组成部分视图。

编辑

只是为了让更多的细节。

我的移动视图看起来是这样的:

文件:ManageLoads.Mobile.cshtml

位置:视图 - > Shipper-> ManageLoads

这个观点里面我有这样的代码:

<div id="landingPage" ng-show="MenuSelection=='DefaultPage'"> 
      @Html.Partial("~/Views/Shipper/_DashboardPartial.cshtml") 
      <div class='message {{MessageClass}}'> 
     <i class='{{MessageIcon}}'></i> 
     <p>{{Message}}</p> 
      </div> 
     </div> 

这部分没有问题,工作正常。现在在_DashboardPartial.cshtml里面,如果我有另一个局部视图的引用,它会失败。

<div id="warehouseSelection" ng-show="getStep()==1"> 
    {@Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");} 
</div> 

此休息并引发错误,但如果我复制粘贴“_MyWarehouse.cshtml”里面就有的内容,它开始重新工作。我已经验证了_MyWarehouse.cshtml的路径是正确的,所以我怀疑它与导致问题的RenderPartial方法的嵌套有关。

问候 基兰

回答

16

的第一个问题,我看到的是,你的Html.RenderPartial语法不正确。该@应该是花括号像这样的外:

@{Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");} 

其次,我不知道的Html.PartialHtml.RenderPartial组合在这里造成了一些问题。尝试使用Html.RenderPartial和上面的语法来查看是否修复了您的错误。

+1

你让我的一天!在过去的几天里,我一直在努力解决这个问题,却不知道发生了什么。问题出在@置于{}内的错误位置。谢谢 – Kiran

2

您有几种选择,如:

  • 使用custom html helpers(简称普通HTML代码);

  • 使用的RenderPartial或作为的RenderAction它说here

(你也应该考虑使用扎根pathes像 '〜/查看/ someController的/ etc /到/我/ partialView.cshtml',甚至移动你的代码到一些共享视图“〜/查看/共享/ ......'但这一切都在你身上)。

编辑:

请看看this article。它解释了你应该如何使用提到的方法。它必须是宁可在这样的方式:

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

@Html.Partial("ViewName") 
+0

我不认为我完全按照你的评论。当我在部分视图上调用这些函数时,这些视图又是由其他部分视图构建的,我得到这些错误。我工作,如果我将第二级局部视图复制到第一局部视图。 – Kiran

+0

我用'@ Html.Partial(...)'没有任何问题。你使用RenderPartial的确切原因是什么? – Siim

+0

@Kiran刚刚在答案中增加了更多信息。 – Agat