asp.net-mvc-3 – MVC绑定到带有列表属性的模型忽略其他属性
发布时间:2020-05-25 00:05:09 所属栏目:asp.Net 来源:互联网
导读:我有一个基本的ViewModel,其属性是复杂类型的列表。当绑定,我似乎坚持得到值的列表,或其他模型属性取决于发布的值(即视图安排)。 视图模型: public class MyViewModel{ public int Id { get; set; } public string Property1 { get; set; } public string
|
我有一个基本的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 – 动态设置超链接控件的navigationurl属性内联
- iis-7 – 使用asp.net在开发机器上创建无cookie应用程序
- asp.net – 当我禁用提交按钮以防止双击时,为什么我的表单没
- asp.net – 有没有办法知道是否有人为您的网站添加了书签?
- asp.net – CustomErrors vs HttpErrors – 一个重大的设计
- asp.net-mvc – viewbag和viewstate之间的区别?
- asp.net – 使用sql server的Web应用程序中的审计跟踪
- asp.net-mvc – 无法加载文件或程序集’Microsoft.Web.Serv
- asp.net – 使用AJAX进行WCF调用
- REST API是否区分大小写或非区分大小写?
推荐文章
站长推荐
- asp.net – 对于每个循环都有控件并在MVC 4中提交
- asp.net-mvc – MS Ajax与jQuery在ASP.NET MVC应
- asp.net-mvc – MVC ELMAH和SQL Azure
- asp.net-mvc – LiveReload ASP.net MVC Web应用
- 如何返回404状态,无效参数传递给我的ASP.NET MVC
- 如何获得干净的ASP.Net错误页面?
- asp.net-mvc – ASP.NET MVC – 为基本控制器中的
- ASP.NET控件属性与[Flags]枚举
- Asp.Net Mvc突出显示当前页面链接技术?
- asp.net-mvc – ASP.NET MVC应用程序自定义错误页
热点阅读
