我正在使用MVC 4并希望稍微整理一下我的视图所以决定创建多个局部视图并在渲染过程中将它们组合在一起。
当渲染的视图很少@Html.RenderPartial('path\to\my\partialView.cshtml')
但是如果此partialView.cshtml又在其中定义了@Html.RenderPartial('path\to\my\otherPartialView.cshtml')
时失败,则此方法有效。
我得到的错误就像使用RenderPartial或Partial方法
一样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
位置:视图 - >发件人 - > 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方法的嵌套有关。
此致 基兰
答案 0 :(得分:19)
我看到的第一个问题是您的Html.RenderPartial语法不正确。 @应该在花括号之外,如下:
@{Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");}
其次,我想知道Html.Partial
和Html.RenderPartial
的组合是否会导致某些问题。尝试将Html.RenderPartial
与上述语法一起使用,看看是否可以修复错误。
答案 1 :(得分:2)
您有几个选项,例如:
使用custom html helpers(简称一般html代码);
使用RenderPartial或RenderAction,如here所述。
(另外你应该考虑使用像'〜/ Views / someController / etc / to / my / partialView.cshtml'这样的root连接,或者甚至将你的代码移动到某些共享视图'〜/ Views / Shared / .. ..'。但那都在你身上。)
修改强>
请看一下this article。它解释了你应该如何使用上面提到的方法。它必须是这样的:
@{ Html.RenderPartial("ViewName"); }
但
@Html.Partial("ViewName")