问题描述
|
我有一个列表对象,试图在foreach循环中显示文本框。但是,该帖子返回空对象。我看不出原因。
这是视图中的代码
<%using(Html.BeginForm(\“ makeTransfer \”,\“ shareTransfer \”)){%>
<% foreach (var i in Model.Inform)//int i = 0; i < Model.Inform.Count(); i++){ %>
<%:Html.HiddenFor(x=>i.shares,new{@value = i.shares}) %>
...
<td style = \"width:20px\"><%:Html.TextBoxFor(x=>i.sharesRq)%></td> cuddling
<%} %>
<%:Html.HiddenFor(x => x.accSrc,new { @value = Model.accSrc })%>
<%:Html.HiddenFor(x=>x.accDst,new{ @value = Model.accDst}) %>
Date of Transfer<%:Html.TextBoxFor(x => x.date)%>
Transfer with benefit<%:Html.CheckBoxFor(x => x.withBenefit)%>
<input type=\"submit\" name=\"save\" value=\"Save\" /></div>
<input type=\"submit\" name=\"cancel\" value=\"Cancel\" /></div>
<%}%>
这是控制器
公共ActionResult makeTransfer(vmTransfer传输,字符串保存,字符串取消)
{
if (cancel != null)
return RedirectToAction(\"startTransfer\");
else if (save != null)
{
foreach (var t in transfer.Inform)
{ ...
我的问题是,transfer.Inform(最后一行的第二行)是表单发布时的列表为空。请尽快提供任何帮助。
解决方法
我建议您使用编辑器模板,而不要在视图中编写任何循环:
<% using (Html.BeginForm(\"makeTransfer\",\"shareTransfer\")) { %>
<%= Html.EditorFor(x => x.Inform) %>
<%= Html.HiddenFor(x => x.accSrc,new { @value = Model.accSrc }) %>
<%= Html.HiddenFor(x => x.accDst,new { @value = Model.accDst }) %>
Date of Transfer <%= Html.TextBoxFor(x => x.date) %>
Transfer with benefit <%= Html.CheckBoxFor(x => x.withBenefit) %>
<input type=\"submit\" name=\"save\" value=\"Save\" /></div>
<input type=\"submit\" name=\"cancel\" value=\"Cancel\" /></div>
<% } %>
并在相应的编辑器模板(~/Views/Shared/EditorTemplates/InformViewModel.ascx
)中:
<%@ Control
Language=\"C#\"
Inherits=\"System.Web.Mvc.ViewUserControl<AppName.Models.InformViewModel>\"
%>
<%= Html.HiddenFor(x => x.shares) %>
...
<td style=\"width:20px\">
<%= Html.TextBoxFor(x => x.sharesRq) %>
</td>
备注:您可能需要根据Inform
属性的类型来调整编辑器模板的名称。
编辑器模板将负责生成正确的ID和输入字段的名称,以便所有内容正确绑定:
[HttpPost]
public ActionResult makeTransfer(vmTransfer transfer,string save,string cancel)
{
if (cancel != null)
{
return RedirectToAction(\"startTransfer\");
}
else if (save != null)
{
foreach (var t in transfer.Inform)
{
...
}
}
...
}