我有一个名为Devices的实体和一个名为DeviceSerials的实体。单个设备可以包含1个或更多序列号。我想为允许添加一个或多个序列号的设备创建创建和编辑视图。这里的关键是我想将Device模型传递回Device控制器并且该控制器创建或更新设备和序列号
我为DeviceSerials创建了一个编辑器模板,并使用
在我的编辑和创建视图中调用了该模板@Html.EditorFor(model => model.DeviceSerials)
我为设备创建操作(GET)
public ActionResult Create()
{
Device device = new Device();
DeviceSerial deviceserial = new DeviceSerial();
device.DeviceSerials.Add(deviceserial);
return View(device);
}
我为设备创建操作(POST)
[HttpPost]
public ActionResult Create(Device device)
{
if (ModelState.IsValid)
{
db.Devices.AddObject(device);
db.SaveChanges();
return RedirectToAction("Details", "Site", new { id = device.SiteId });
}
return View(device);
}
当我点击创建按钮时,我收到以下错误
EntityCollection已经初始化。只应在反序列化对象图时调用InitializeRelatedCollection方法初始化新的EntityCollection。
据说我做了研究并找到了两个解决方案
第一个解决方案修复了我的创建操作,但我的编辑操作仍然给了我同样的错误
解决方案#1:修改创建(POST)操作
[HttpPost]
public ActionResult Create([Bind(Exclude="DeviceSerials")]Device device)
{
TryUpdateModel(device.DeviceSerials, "DeviceSerials");
if (ModelState.IsValid)
{
db.Devices.AddObject(device);
db.SaveChanges();
return RedirectToAction("Details", "Site", new { id = device.SiteId });
}
return View(device);
}
解决方案#2:实现自定义模型绑定器(我无法工作)
任何人都可以推荐最好的方式来完成我想要做的事情吗?