【问题标题】:Editing a Variable Length List, ASP.NET MVC 3 Style with Table编辑可变长度列表,带有表格的 ASP.NET MVC 3 样式
【发布时间】:2011-11-01 11:26:13
【问题描述】:

我正在关注 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?

谢谢

【问题讨论】:

  • 您是否必须修改 Steven Sanderson 博客中的 HtmlPrefixScopeExtensions 才能使其正常工作?如果是这样,您介意分享您所做的更改吗?我正在尝试在 MVC3 中使用 razor 做同样的事情,并且对象集合返回 null。谢谢
  • 不,我们不必对此进行任何更改。唯一的变化是接受的答案中下面提到的语法。如果您愿意,您可以提出一个新问题,我可以将您的代码与我们的代码进行比较,看看是否有任何差异。

标签: html asp.net-mvc razor


【解决方案1】:

经过一番试验,我想出了:

<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>

这对我有用。

【讨论】:

  • 看起来有点奇怪,但它确实可以解决问题!谢谢!
  • 我完全同意它看起来很奇怪,它带回了一些可怕的 Web 窗体记忆。 @: 是混合纯文本和代码的简写 [link]haacked.com/archive/2011/01/06/…
猜你喜欢
  • 2023-03-26
  • 2011-09-09
  • 1970-01-01
  • 2012-06-05
  • 2012-06-14
  • 1970-01-01
  • 2012-06-29
  • 2017-08-26
  • 2012-02-23
相关资源
最近更新 更多