编辑可变长度列表,ASP.NET MVC 3样式与表

时间:2011-08-22 20:46:50

标签: html asp.net-mvc razor

我正在关注Steven Sanderson的博客文章here,以创建一个可编辑且可变长度的项目列表。在他的帖子中,他使用div来显示列表中的新项目,但我正在使用表格。因此,我对每个项目的部分视图是渲染带有要编辑的各个字段的tr标记。现在我的部分视图看起来像这样:

<tr>                
       @using (Html.BeginCollectionItem("LineItems"))
       {             
            <td>        
                @Html.TextBoxFor(m => m.Description)
                @Html.ValidationMessageFor(m => m.Description)                              
            </td>
            <td>
                @Html.TextBoxFor(m => m.Quantity)        
                @Html.ValidationMessageFor(m => m.Quantity)
            </td>
            <td>
                @Html.TextBoxFor(m => m.Amount)          
                @Html.ValidationMessageFor(m => m.Amount)       
            </td>
       }       
</tr>

这实际上在我测试过的所有浏览器上都能正确呈现,但问题是这确实会生成无效的HTML,因为它会在开始的tr标记之后放置一个隐藏的输入标记。

<tr>
   <input type="hidden" name="LineItems.index" .... />
   <td>
      ...
   </td>
   ...
</tr>

另一位用户在链接帖子上发表了评论,说明你可以将using语句移动到第一个标签中并且它可以正常工作但是我无法使用ASP.NET MVC 3和Razor来实现这一点查看引擎。

有没有人知道如何使用Steven Sanderson提供的逻辑但是在第一个td中获取隐藏的索引输入字段以便不生成无效的HTML?

由于

1 个答案:

答案 0 :(得分:4)

经过一些实验,我想出了:

<tr>                
   <td>        
   @using (Html.BeginCollectionItem("LineItems"))
   {             
            @Html.TextBoxFor(m => m.Description)
            @Html.ValidationMessageFor(m => m.Description)                              
        @:</td>
        @:<td>
            @Html.TextBoxFor(m => m.Quantity)        
            @Html.ValidationMessageFor(m => m.Quantity)
        @:</td>
        @:<td>
            @Html.TextBoxFor(m => m.Amount)          
            @Html.ValidationMessageFor(m => m.Amount)       
   }       
   </td>
</tr>

这对我有用。