作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我是 ASP.NET MVC 的新手,我想为集合中的每个项目创建一个带有文本框的 View 。我该怎么做,以及如何在它 POST 返回时捕获信息?我使用表单和表单元素为模型构建静态表单,但从未基于可变大小集合动态生成表单元素。
我想在 mvc 3 中做这样的事情:
@foreach (Guest guest in Model.Guests)
{
<div>
First Name:<br />
@Html.TextBoxFor(???) @* I can't do x => x.FirstName here because
the model is of custom type Invite, and the
lambda wants to expose properties for that
type, and not the Guest in the foreach loop. *@
</div>
}
如何为每个客人创建一个文本框?我如何在它发回的操作方法中捕获它们?
感谢您的帮助。
最佳答案
绝对是编辑器模板的工作。所以在你看来,你把这一行:
@Html.EditorFor(x => x.Guests)
和相应的编辑器模板(~/Views/Shared/EditorTemplates/Guest.cshtml
)
@model AppName.Models.Guest
<div>
First Name:<br />
@Html.TextBoxFor(x => x.FirstName)
</div>
这就是全部。
现在可以立即执行以下操作:
public ActionResult Index(int id)
{
SomeViewModel model = ...
return View(model);
}
[HttpPost]
public ActionResult Index(SomeViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
// TODO: do something with the model your got from the view
return RedirectToAction("Success");
}
请注意,编辑器模板的名称很重要。如果您的 View 模型中的属性是:
public IEnumerable<Guest> Guests { get; set; }
编辑器模板应称为 Guest.cshtml
。它将为 Guests
集合的每个元素自动调用,并将负责正确生成输入的 ID 和名称,以便在您 POST 回时一切自动进行。
结论:每次在 ASP.NET MVC View 中编写循环(for
或 foreach
)时,您应该知道自己做错了,并且有一个更好的方法。
关于c# - 如何在 ASP.NET MVC 中使用多个表单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070399/
我是一名优秀的程序员,十分优秀!