如何在foreach循环中绑定一个Ienumerable <tmodel>?</tmodel>

时间:2012-02-22 15:40:36

标签: asp.net-mvc asp.net-mvc-3

我有一个MVC2视图,它与模型紧密相关......

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<AdjustmentModel>>" %>

在视图中我有......

         foreach (var adjustment in Model)
           {%>
         <tr row="<%: row %>">
            <td class="nonSelectable" column="0">
                <div>
                    ...I want to put a textbox here that has name="someId" 
                   and val="someVal" but how?
                </div>
            </td>

            }%>

模型是

class AdjustmentModel
{
    public int ID;
    public int amount;
}

我只是无法想象我传递给Html.TextBoxFor()的委托,因为当我传递一个模型时,intellisense不会像我传递给Ienumerable一样工作,所以我该如何使用该模型?

2 个答案:

答案 0 :(得分:1)

我建议您使用编辑器模板。这样您就不需要编写任何循环并仍然保持强类型:

<table>
    <%= Html.EditorForModel() %>
</table>

然后定义一个编辑器模板,该模板将自动为集合中的每个元素呈现(~/Views/Shared/EditorTemplates/AdjustmentModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AdjustmentModel>" 
%>
<tr>
    <td class="nonSelectable" column="0">
        <div>
            <%= Html.HiddenFor(x => x.ID) %>
            <%= Html.EditorFor(x => x.amount) %>
        </div>
    </td>
</tr>

尊重将您的编辑器模板放在~/Views/CurrentController/EditorTemplates~/Views/Shared/EditorTemplates文件夹中的惯例非常重要。模板的名称必须是集合中使用的类型。例如,如果您有IEnumerable<AdjustmentModel>,则必须将该文件调用AdjustmentModel.ascx,并且明显强烈地键入AdjustmentModel。然后将为每个元素自动调用此模板。

答案 1 :(得分:0)

您可以使用 Html.TextBox

<%= Html.TextBox("SomeId", "SomeVal") %>