模型绑定到列表MVC 4
是否存在将IList项绑定到视图的模式。 我似乎遇到了HttpPost的问题。 我知道菲尔哈克写了一篇很好的文章,但它已经过时了,他说他们可能会修复MVC 4。
如果我需要为每个项目显示一个表单,并为各种属性输入,我就是这样做的。 真的取决于我想要做的事情。
ViewModel看起来像这样:
public class MyViewModel { public List Persons{get;set;} }
查看(当然有BeginForm):
@model MyViewModel @for( int i = 0; i < Model.Persons.Count(); ++i) { @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) }
行动:
[HttpPost]public ViewResult(MyViewModel vm) { ...
请注意,在回发时,只有具有可用输入的属性将具有值。 即,如果Person具有.SSN属性,则在post操作中将不可用,因为它不是表单中的字段。
请注意,MVC的模型绑定的工作方式,它只会查找连续的ID。 因此,在有条件地隐藏项目的情况下执行此类操作将导致它在第5项之后不绑定任何数据,因为一旦遇到ID中的间隙,它将停止绑定。 即使有10个人,你也只会获得回发中的前4个:
@for( int i = 0; i < Model.Persons.Count(); ++i) { if(i != 4)//conditionally hide 5th item, { //but BUG occurs on postback, all items after 5th will not be bound to the the list @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) } }
一个干净的解决方案可以创建一个通用类来处理列表,因此您不需要在每次需要时创建不同的类。
public class ListModel { public List Items { get; set; } public ListModel(List list) { Items = list; } }
当你返回视图时,你只需要做:
List ListOfCustomClass = new List (); //Do as needed... return View(new ListModel (ListOfCustomClass));
然后在模型中定义列表:
@model ListModel
准备好了:
@foreach(var element in Model.Items) { //do as needed... }
〜控制器
namespace ListBindingTest.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { List tmp = new List (); tmp.Add("one"); tmp.Add("two"); tmp.Add("Three"); return View(tmp); } [HttpPost] public ActionResult Send(IList input) { return View(input); } } }
〜强类型索引视图
@model IList @{ Layout = null; } Index @using(Html.BeginForm("Send", "Home", "POST")) { @Html.EditorFor(x => x)
}
〜强类型发送视图
@model IList @{ Layout = null; } Send @foreach(var element in @Model) { @element
}
这就是你必须做的所有事情,将他的MyViewModel模型更改为IList。
- 将WebSockets与ASP.NET Web API一起使用
- 堆栈不足以继续安全地执行程序。 ASP.NET MVC 4
- 选择mvc 4下拉默认值
- 如何显示打开/保存对话框asp net mvc 4
- ASP.NET MVC Razor部分和部分
- Asp.net mvc 4 – 需要使用会话但不能使用cookie
- 无法从程序集’itextsharp,Version = 5.5.5.0,Culture = neutral,PublicKeyToken = 8354ae6d2174ddca’加载类型’iTextSharp.text.html.HtmlParser’
- 非顺序集合绑定
- 捕获WebAPI方法调用的响应大小(以字节为单位)