0

根据我昨天提出的一个问题,我试图找到一种方法来动态创建更多文本框并将这些映射到我的视图模型,因此在发布到服务器时它将抓取所有动态(js)生成的文本框并发布到一个对象,例如一个列表。

举一个这个令人困惑的问题的例子:

我有一个标有“主要联系人”的文本框,工单创建者可以在此框中输入联系人姓名和电话号码。我想要做的基本上是将其切换到三个文本框。一个用于姓名、电子邮件和电话号码,而不是一个框。然后我将创建一些 javascript,它们将动态创建另外三个框以将另一个联系人添加到此列表集合中。然后,当用户提交表单以修改或创建票证时,它会将模型内的这个集合传递给控制器​​。然而,对于 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 以提供客户端验证。

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

4

1 回答 1

1

不完全确定您的意思,但是您可能已经知道,使用 MVC 从/到列表的绑定很容易建模。至于保存这样的深层对象,我会使用 Ticket.List 上的 [Ignore] 属性,因此它不会被持久化并单独处理。我将联系人与 Ticket 对象分开加载,然后手动将它们添加到 Ticket 对象,或者使用连接查询并尝试一对多的方法一次性加载所有内容。

我认为您希望 Petapoco 能够同时更新所有内容?这不会发生,你需要打破它。很难从你到目前为止所写的内容中说出来。不会有很长的联系人列表(从它的声音来看),所以只需一个一个地插入或更新它们。

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

于 2012-10-11T08:06:03.333 回答