【发布时间】:2019-04-22 14:44:02
【问题描述】:
我无法将使用局部视图动态创建的子复杂对象集合绑定到视图模型IEnumerable 属性。
我已经使用我在此博客https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 上找到的技术成功地将使用部分视图动态创建的对象绑定到视图模型。我采用了相同的技术,但无法将集合绑定到视图模型中的 IEnumerable 属性。
[BindRequired]
public class EmployeeViewModel
{
other properties....
public IEnumerable<ContactDetailViewModel> EmployeeContact { get; set; }
}
[BindRequired]
public class ContactDetailViewModel
{
// I use this as my indexer for dynamic elements
public string RecordId { get; set; } = Guid.NewGuid().ToString();
public string Telephone { get; set; }
public string EmailAddress { get; set; }
public string ContactDescription { get; set; }
}
我通过 ajax 调用此操作方法以添加动态联系人详细信息元素,它以 html 形式返回部分视图,并且工作正常。
[Route("[action]", Name = "BlankEmployeeContactDetail"), HttpGet("AddBlankContactDetail")]
public PartialViewResult AddBlankContactDetail()
{
return PartialView("_ContactInformation", new ContactDetailViewModel());
}
初始联系方式使用以下内容添加到主视图,请点击此链接https://1drv.ms/u/s!AkRSHVUtFlKhuHaxH96Ik4ineATE 下载主视图和部分视图 cshtml 文件。还值得注意的是,当我包含此部分视图时,所有其他属性的模型绑定都失败,但在我将其注释掉时有效。我很困惑,如果您能给予我任何帮助,我将不胜感激。
<section id="widget-grid" class="">
<div class="row contactContainer">
@{ await Html.RenderPartialAsync("_ContactInformation", new ContactDetailViewModel()); }
</div>
</section>
这是我试图将发布的数据绑定到的控制器操作方法:
[Route("[action]"), HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public IActionResult Register([FromForm] EmployeeViewModel model, [FromQuery] string returnUrl = null)
{
if (ModelState.IsValid)
{
}
return View(model);
}
【问题讨论】:
-
我不明白你在哪里绑定模型。你的动作没有参数,你直接实例化你的视图模型。
-
您好,感谢您的评论,我在上面的链接中附加了控制器,但我将编辑以包含接收发布数据的操作方法。
标签: asp.net-core model-view-controller c#-4.0 asp.net-core-mvc partial-views