我有类似的代码:
我的观点
@model MyCode.Models.RemarksModel
foreach (var row in Model.List)
{
<tr>
<td align="center"><font class="font_table_content">@row.Id</font></td>
<td align="center"><font class="font_table_content">@row.Full_Name</font></td>
<td align="center"><font class="font_table_content">@Html.TextBox("row.Remarks")</font></td>
}
我的模特
public class RemarksModel
{
public IList<UserRemarks> List { get; set; }
}
我的用户注释对象
public class UserRemarks
{
public virtual string Id { get; set; }
public virtual string Full_Name { get; set; }
public virtual string Remarks { get; set; }
}
接下来在我的控制器中,我将有一些代码通过Nhibernate从DB加载记录到IList中,然后返回带有模型内部列表的视图,如下所示:
[HttpGet]
public ActionResult RemarksTest()
{
RemarksModel model = new RemarksModel();
model.List = LoadTheList();
return View(model);
}
现在,我想问的是,我如何接收列表,即获取备注值?
[HttpPost]
public ActionResult RemarksTest(RemarksModel model)
{
var list = model.list;
foreach (var remarks in list)
{
//do something to save the input data into code.
}
return View(model);
}
实际代码更复杂,我已经阅读了那些用于接收值的IDictionary方法。但是,实现它们会导致显示值而不是,因为代码不再引用model.list。
任何想法如何在上面的模型中使用相同的“列表”显示,还能接收数据?
答案 0 :(得分:1)
我认为您需要更改您的观点,如下所示:
@model IEnumerable<UserRemarks>
@using(Html.BeginForm())
{
for(int i=0; i<@Model.Count; i++)
{
<table>
<tr>
<td align="center"><font class="font_table_content">@Html.TextboxFor(m => m[i].Id)</font></td>
<td align="center"><font class="font_table_content">@Html.TextboxFor(m => m[i].Full_Name</font></td>
<td align="center"><font class="font_table_content">@Html.TextboxFor(m => m[i].Remarks")</font></td>
</tr>
</table>
}
<input type="submit" value="submit"/>
}
然后应将get动作更改为:
[HttpGet]
public ActionResult RemarksTest()
{
List<UserRermarks> model = LoadTheList();
return View(model);
}
后期行动改为:
[HttpPost]
public ActionResult RemarksTest(IEnumerable<UserRemarks> model)
{
foreach (var remarks in model)
{
//do something to save the input data into code.
}
return View(model);
}
不幸的是我没有在我正在处理的计算机上使用visual studio,所以我无法测试上面的内容,但是逻辑应该是正确的,所以如果出现问题,可能只是因为我输入了一些错误。
希望这适合你。
答案 1 :(得分:0)
在您的GET控制器操作中,您可以将列表存储在TempData
:
[HttpGet]
public ActionResult RemarksTest()
{
RemarksModel model = new RemarksModel();
model.List = LoadTheList();
TempData['List'] = model.List;
return View(model);
}
然后在您的POST操作中使用以下命令检索它:
var myList = TempData['List']
如果您的应用是无状态的(即没有会话),那么您可以使用a cookie-based TempData provider。
答案 2 :(得分:0)
问题是你只是在显示值。 要将值发布到服务器,您需要输入一些输入(例如,文本框,复选框,单选按钮,隐藏字段)。在您的情况下,您可以定义隐藏字段,以便模型绑定器将它们绑定到UserRemarks列表。
按照http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx将列表绑定到模型。