asp.net-mvc-3 – MVC绑定到带有列表属性的模型忽略其他属性
发布时间:2020-12-15 19:14:59 所属栏目:asp.Net 来源:网络整理
导读:我有一个基本的ViewModel,其属性是复杂类型的列表。当绑定,我似乎坚持得到值的列表,或其他模型属性取决于发布的值(即视图安排)。 视图模型: public class MyViewModel{ public int Id { get; set; } public string Property1 { get; set; } public strin
我有一个基本的ViewModel,其属性是复杂类型的列表。当绑定,我似乎坚持得到值的列表,或其他模型属性取决于发布的值(即视图安排)。
视图模型: public class MyViewModel { public int Id { get; set; } public string Property1 { get; set; } public string Property2 { get; set; } public List<MyDataItem> Data { get; set; } } public class MyDataItem { public int Id { get; set; } public int ParentId { get; set; } public string Name { get; set; } public string Value { get; set; } } 控制器操作: public ActionResult MyForm() { MyViewModel model = new MyViewModel(); model.Id = 1; model.Data = new List<MyDataItem>() { new MyDataItem{ Id = 1,ParentId = 1,Name = "MyListItem1",Value = "SomeValue"} }; return View(model); } [HttpPost] public ActionResult MyForm(MyViewModel model) { //... return View(model); } 这里是基本视图(没有列表标记) @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>My View Model</legend> @Html.HiddenFor(model => model.Id) <div class="editor-label"> @Html.LabelFor(model => model.Property1) </div> <div class="editor-field"> @Html.EditorFor(model => model.Property1) @Html.ValidationMessageFor(model => model.Property1) </div> <div class="editor-label"> @Html.LabelFor(model => model.Property2) </div> <div class="editor-field"> @Html.EditorFor(model => model.Property2) @Html.ValidationMessageFor(model => model.Property2) </div> <p> <input type="submit" value="Save" /> </p> </fieldset> } 当发布回控制器时,我得到2个属性值和一个null值为’数据’属性如预期。 如果我添加列表的标记如下(基于Scott Hanselman post和Phil Haack’s post中的信息): <div class="editor-field"> @for (int i = 0; i < Model.Data.Count(); i++) { MyDataItem data = Model.Data[i]; @Html.Hidden("model.Data[" + i + "].Id",data.Id) @Html.Hidden("model.Data[" + i + "].ParentId",data.ParentId) @Html.Hidden("model.Data[" + i + "].Name",data.Name) @Html.TextBox("model.Data[" + i + "].Value",data.Value) } </div> 模型的“数据”属性已成功绑定,但其他属性为null。 发布的表单值如下: Id=1&Property1=test1&Property2=test2&model.Data%5B0%5D.Id=1&model.Data%5B0%5D.ParentId=1&model.Data%5B0%5D.Name=MyListItem1&model.Data%5B0%5D.Value=SomeValue 有没有办法获得两组属性填充或我只是错过一些明显的东西? 编辑: 对于那些谁是好奇的。基于MartinHN的答案,原始生成的标记是: <div class="editor-field"> <input id="model_Data_0__Id" name="model.Data[0].Id" type="hidden" value="1" /> <input id="model_Data_0__ParentId" name="model.Data[0].ParentId" type="hidden" value="1" /> <input id="model_Data_0__Name" name="model.Data[0].Name" type="hidden" value="MyListItem1" /> <input id="model_Data_0__Value" name="model.Data[0].Value" type="text" value="SomeValue" /> </div> 新生成的标记是: <div class="editor-field"> <input id="Data_0__Id" data-val="true" name="Data[0].Id" type="hidden" value="1" data-val-number="The field Id must be a number." data-val-required="The Id field is required." /> <input id="Data_0__ParentId" name="Data[0].ParentId" type="hidden" value="1" data-val="true" data-val-number="The field ParentId must be a number." data-val-required="The ParentId field is required." /> <input id="Data_0__Name" name="Data[0].Name" type="hidden" value="MyListItem1" /> <input id="Data_0__Value" name="Data[0].Value" type="text" value="SomeValue" /> </div> 其结果是以下发布的值: Id=1&Property1=test1&Property2=test2&Data%5B0%5D.Id=1&Data%5B0%5D.ParentId=1&Data%5B0%5D.Name=MyListItem1&Data%5B0%5D.Value=SomeValue 注意没有’模型’。在名称和发布的值… 解决方法
尝试将Data collection的代码更改为此,并让MVC处理命名:
<div class="editor-field"> @for (int i = 0; i < Model.Data.Count(); i++) { @Html.HiddenFor(m => m.Data[i].Id) @Html.HiddenFor(m => m.Data[i].ParentId) @Html.HiddenFor(m => m.Data[i].Name) @Html.TextBoxFor(m => m.Data[i].Value) } </div> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core-mvc – 按内容类型,在网络核心2中的Web api属
- asp.net – VS 2010失败调试:HttpException在LoadControl中
- asp.net – 在应用程序级别之外注册为allowDefinition =’M
- 单声道和ASP.NET身份验证
- asp.net-mvc – MVC4:从服务器端手动设置验证消息
- asp.net – Javascript日期本地化
- asp.net – Visual studio 2013:无法看到下拉开始使用任何
- asp.net-mvc-2 – Html.Hidden()插入错误的值
- 为什么使用ASP.NET OutputCache继续返回200 OK,而不是304 N
- asp.net-mvc – ASP.NET MVC应用程序自定义错误页面不显示在
推荐文章
站长推荐
- 编辑资源文件而不重新编译ASP.NET应用程序
- asp.net-mvc-2 – 如何让HandleErrorAttribute与
- asp.net-mvc – ASP.NET MVC – 值类型的自定义验
- .net – 为什么在单击按钮时,SelectedIndexChang
- asp.net – 如何将我的Autofac容器插入ASP NET身
- asp.net-mvc-4 – Autofac和ASP .Net MVC 4 Web
- asp.net-mvc – ASP.NET MVC 4重定向回索引视图
- asp.net-mvc – 在没有EF的情况下在appsettings.
- asp.net – 在IHTTPHandler中以编程方式创建Syst
- asp.net – Jquery用户控件
热点阅读