我有一个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一样工作,所以我该如何使用该模型?
答案 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") %>