部分视图不会在foreach razor标记内呈现td元素

时间:2016-01-24 10:10:04

标签: asp.net-mvc asp.net-mvc-4 razor

我使用产品列表作为我的部分视图的模型。在局部视图中,我使用foreach循环来获取Product类的值并尝试将其呈现给用户。在局部视图中,我编写了这段代码:

@model Project.ViewModel.ListofProductsVM
@using Project.Models
<table>
<tr>
    <th>
        Name
    </th>
    <th>
        Cost
    </th>
</tr>
@{
    foreach (Products prod in Model.products)
    {
        <tr>
            <td>@prod.Name.ToString()</td>
            <td>@prod.Cost.ToString()</td>
        </tr>

    }
}
</table>

我可以在页面中看到标题“名称”“费用”,但产品名称及其费用未呈现。当我在HTML中检查源代码时,它只显示这个HTML:

<table>
<tr>
    <th>
        Name
    </th>
    <th>
        Cost
    </th>
</tr>
</table>

调试时我可以看到值正确传递给部分视图。即使“@ prod.Name”“@ prod.Cost”也会向我显示正确的值。但它没有呈现给HTML。我不明白我在做错了什么。提前谢谢。

2 个答案:

答案 0 :(得分:0)

@{ }表示这是c#代码块,你可以通过这样编写foreach循环代码来解决问题:

@foreach (Products prod in Model.products)
{
    <tr>
        <td>@prod.Name.ToString()</td>
        <td>@prod.Cost.ToString()</td>
    </tr>

}

如果你想坚持自己的方式,那么你必须指定将其渲染为html,如:

@{
   foreach (Products prod in Model.products)
   {
     @:<tr>
         @:<td>@prod.Name.ToString()</td>
         @:<td>@prod.Cost.ToString()</td>
     @:</tr>

  }
}

答案 1 :(得分:0)

我有一个类似的问题。就我而言,我只需要添加&#34; @&#34;在foreach嵌套在if语句之前。这是我工作代码的缩减片段

C# Model class:

public class MyModel
{
    public string FirstName{ get; set; }
    public string LastName{ get; set; }
}

CSHTML file: 

@model List<MyProject.Models.MyModel>

@if (Model.Count > 0)
{
    <div class="row" >
        <table>
            @foreach (var item in Model)
            {
                <tr>@item.FirstName @item.LastName</tr>
            }
        </table>
    </div>
}

但它与另一位用户给你的答案相同。