根据我昨天提出的一个问题,我试图找到一种动态创建更多文本框的方法,并将这些地图映射到我的视图模型,这样一旦发布到服务器,它将抓取所有动态(js)生成的文本框并将其发布到诸如List之类的对象。
举一个令人困惑的问题的例子:
我有一个标记为“主要联系人”的文本框,并且故障单创建者可以在此框中输入联系人姓名和电话号码。我本来想要做的是,将其切换为三个文本框。一个用于名称,电子邮件和电话号码而不是一个盒子。然后我将创建一些javascript,它将动态创建另外三个框以将另一个联系人添加到此List集合中。然后,当用户提交表单以修改或创建票证时,它会将模型内的此集合传递给控制器。然而,对于petapoco来说,这有点令人困惑。让我告诉你控制器:
[HttpPost]
public ActionResult ModifyTicket(Ticket model)
{
string userString = User.Identity.Name.Replace("ONHOLD\\", "");
if (ModelState.IsValid)
{
model.CreatedDate = DateTime.Now;
model.LastUpdateBy = Util.GetEmployeeIdByName(userString);
model.LastUpdate = DateTime.Now;
model.IsComplete = false;
model.ClientString = Util.GetClientNameById(model.ClientId);
model.LocationString = Util.GetLocationNameById(model.LocationId);
model.Update();
SuccessMessage = "You have successfully updated ticket number: " + model.TicketId + " for the following client: " + model.ClientString + ".";
return RedirectToAction("Index");
}
ErrorMessage = "Woops! Something went wrong, please check back in a few moments, if the problem persists please contact development.";
return RedirectToAction("Index");
}
对此的简单回答是我的数据库模型将包含一个List对象,原因如下。但是,我正在使用PetaPoco,我不完全确定它是如何完成的。我可以手动将集合添加到我的数据库模型中,但是当我根据任何数据库模式更改重新生成模型时,我将丢失对文件所做的任何更改。
我也在使用我的视图使用DataAnnotations进行验证的部分类。但是,此类与数据库模型完全相同,它只包含DataAnnotations以提供客户端验证。
如果有人理解我想要完成的事情,我会非常乐意提供更多信息来澄清任何遗失的部分。我只需要解决这个问题,因为我找不到解决这个问题的可靠方法!
答案 0 :(得分:1)
不完全确定你的意思,但很容易to model bind from/to a list with MVC,你可能已经知道了。至于保存像这样的深层对象,我会使用Ticket.List上的[Ignore]属性,因此它不会被持久化并单独处理它。我将与Ticket对象分开加载Contacts,然后手动将它们添加到Ticket对象,或者使用连接查询并尝试一对多的方法一次性加载它。
我认为你期待Petapoco一体化更新?这不会发生你需要打破它。很难说你到目前为止所写的内容。不会有很长的联系人列表(来自它的声音),所以只需逐个插入或更新它们。
那可能会有所帮助,也可能不会。