1

我想在我的 Razor 视图中执行此操作:

@foreach (Customer cust in Model.Customers)
{
    <tr data-custid="@customer.GetIdAsText()">
        @Html.RenderPartial("CustomerListTableRow", cust)
    </tr>
}

据我了解,这应该有效。foreach 块包含一个 <tr>...</tr>。在里面,它处于标记模式,所以我需要 @ 来切换到 C# 模式。问题是显然变量 cust 丢失了它的类型信息(和值?),所以它抱怨它不能将 void 转换为 RenderPartial 期望的对象。

我让它像这样工作:

@foreach (Customer cust in Model.Customers)
{
    @:<tr data-custid="@customer.GetIdAsText()">
        Html.RenderPartial("CustomerListTableRow", cust);
    @:</tr>
}

但是除了看起来很丑之外,如果我让 VS 美化代码,它会像这样搞砸:

@foreach (Customer cust in Model.Customers)
{
    @:<tr data-custid="@customer.GetIdAsText()">
Html.RenderPartial("CustomerListTableRow", cust); @:</tr>                 }

不错吧?:-)

那么,为什么第一个解决方案不起作用?我应该怎么写?

4

2 回答 2

4

Html.RenderPartial()是一个 void 方法,因此它必须用{ }块括起来:

@{Html.RenderPartial("CustomerListTableRow", cust);}

你肯定要找的是Html.Partial(),它返回一个MvcHtmlString,它可以像这样使用:

@Html.Partial("CustomerListTableRow", cust)
于 2012-12-13T16:27:43.990 回答
0

我认为这应该工作,

@foreach (Customer cust in Model.Customers)
{
    <tr data-custid="@customer.GetIdAsText()">
        @Html.RenderPartial("CustomerListTableRow", cust);
    </tr>
}

取决于您正在运行的 MVC 版本。

您能否提供有关该错误的更多详细信息?

于 2012-12-13T16:20:54.373 回答