我有一个类似
的模型public class A {
// Properties - some of them are required some optional
// Optional
public class ICollection<B> Items { get; set; }
}
public class B {
public string A {get;set;} // Required
}
要使用Html.EditoFor(o => o.Items[0])
我必须向Items
添加一个空对象,因此会将此对象发送到服务器,导致ModelState.IsValid
为假(如果用户未选择)添加任何B
s。
如何正确处理此问题?可选的是为集合创建[Optional]
属性,该集合可以检查列表并检查它是否只包含一个对象,如果该对象是默认对象,则跳过它。
Items
属性在客户端通过调用呈现局部视图(Html.EditoFor(o => o.Items[0])
)的控制器以及更多js-fiddle来填充,以确保所有索引都正确。
谢谢!
答案 0 :(得分:0)
我在Github问here问了一个问题,并得到了一个正确指示我的答案。
// PartialView _AddContact.cshtml
@model App.Features.Customer.CustomerContactModel
@{
ViewData.TemplateInfo.HtmlFieldPrefix = "Contacts[0]";
}
@Html.EditorForModel()
// PartialView _AddContacts.cshtml
@model IList<App.Features.Customer.CustomerContactModel>
@{
ViewData.TemplateInfo.HtmlFieldPrefix = "Contacts";
}
@Html.EditorForModel()
// Usage Edit.cshtml
@Html.Partial("_AddContact", new CustomerContactModel())
// Usage Create.cshtml
@Html.Partial("_AddContact")
// Controller action called from javascript do append partial views to DOM
public IActionResult AddContact([FromForm] IList<CustomerContactModel> contacts)
{
if (ModelState.IsValid)
{
ViewData["inline"] = true; // Different template for inline edit
return PartialView(contacts);
}
return new JsonResult(ModelState)
{
StatusCode = (int) HttpStatusCode.BadRequest
};
}