2012-12-13 63 views
1

我想這樣做,在我的Razor視圖:奇怪的剃刀嵌套的foreach(...){<tr> @Html ....</tr>}

@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

Html.RenderPartial()是一種無效的方法,因此它必須以{ }塊包圍它:

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

你肯定要找的是Html.Partial(),它返回一個MvcHtmlString,它可以這樣使用:

@Html.Partial("CustomerListTableRow", cust) 
0

我認爲這應該工作,

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

根據您正在運行的MVC的版本。

您能提供有關錯誤的更多詳細信息嗎?

+0

看看保羅的答案,這是正確的。我剛剛發現自己,並回到這裏回答我自己的問題,但他打敗了我。 :-) –