PetaPoco复杂类型发布到控制器

时间:2012-10-10 15:13:37

标签: asp.net-mvc data-annotations petapoco

根据我昨天提出的一个问题,我试图找到一种动态创建更多文本框的方法,并将这些地图映射到我的视图模型,这样一旦发布到服务器,它将抓取所有动态(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以提供客户端验证。

如果有人理解我想要完成的事情,我会非常乐意提供更多信息来澄清任何遗失的部分。我只需要解决这个问题,因为我找不到解决这个问题的可靠方法!

1 个答案:

答案 0 :(得分:1)

不完全确定你的意思,但很容易to model bind from/to a list with MVC,你可能已经知道了。至于保存像这样的深层对象,我会使用Ticket.List上的[Ignore]属性,因此它不会被持久化并单独处理它。我将与Ticket对象分开加载Contacts,然后手动将它们添加到Ticket对象,或者使用连接查询并尝试一对多的方法一次性加载它。

我认为你期待Petapoco一体化更新?这不会发生你需要打破它。很难说你到目前为止所写的内容。不会有很长的联系人列表(来自它的声音),所以只需逐个插入或更新它们。

那可能会有所帮助,也可能不会。