ASP.NETMVC-如何动态地向对象添加项,并将其绑定到控制器以存储在数据库中

本文关键字:绑定 控制器 数据库 存储 何动态 NETMVC- 动态 添加 对象 ASP | 更新日期: 2023-09-27 17:58:03

我想从POCO对象中定期添加和删除项,并将其存储在相关的表中。例如:

class Contact{
    [Key]
    public int id {get; set;}
    [Required] public string name {get; set;}
    public IEnumerable<Phone> phones{get; set;}
}
class Phone{
    [Key]
    public int id {get;set;}
    [Required] public string phone_type {get; set;}
    [Required] public string phone_number {get; set;}
}

Contact可以拥有很多手机。

联系人编辑视图如下:

@model SGD.Models.Contact
@Html.LabelFor(model => model.name)
@Html.EditorFor(model => model.name)
@Html.LabelFor(model => model.phones)
<div id="phones"></div>
<a href="#" onclick="addPhone()">Add new phone</a>
<script>
    function addPhone() {
        $.ajax({url: "/Phones/_Phone",
             cache: false,
             success: function(html) { $("#phones").append(html);}}
    )}
</script>

"添加新手机"链接按钮将此部分视图附加到#phonesdiv 中

@model SGD.Models.Phone
@{
    Layout = null;
}
    @Html.HiddenFor(model => model.id)
    @Html.LabelFor(model => model.phone_type)
    @Html.EditorFor(model => model.phone_type)
    @Html.ValidationMessageFor(model => model.phone_type)
    @Html.LabelFor(model => model.phone_number)
    @Html.EditorFor(model => model.phone_number)
    @Html.ValidationMessageFor(model => model.phone_number)

但我不知道如何在控制器中处理和绑定帖子数据,并将联系人和相关的电话记录存储在DB中。我该怎么做?

ASP.NETMVC-如何动态地向对象添加项,并将其绑定到控制器以存储在数据库中

首先,我想看看Phil Haack的这篇文章。

你需要在javascript中使用一些机制来将索引应用到你的手机部分,但简而言之,你的部分需要看起来更像这样:

@model SGD.Models.Phone
@{
    Layout = null;
}
<input name="phones[0].id" style="display:none;"/>
@Html.LabelFor(model => model.phone_type)
<input name="phones[0].phone_type" />
@Html.LabelFor(model => model.phone_number)
<input name="phones[0].phone_number" />

至于数据库部分,我假设您首先使用基于所示模型的实体框架代码。在这种情况下,您的代码优先模型存在一些问题。阅读这篇msdn文章,了解如何为不同类型的关系正确构建代码优先模型。我猜你打算在联系人和手机之间建立一对多的关系,一个联系人可能有很多手机。在这种情况下,您的模型应该如下:

class Contact{
    [Key]
    public int Id {get; set;}
    public string name {get; set;}
    public ICollection<Phone> phones{get; set;}
}
class Phone{
    [Key]
    public int id {get;set;}
    public string phone_type {get; set;}
    public string phone_number {get; set;}
    public Contact contact { get; set; }
}

从那里,使用你的上下文将新手机添加到适当的联系人中,就像你的AddPhone操作方法中那样:

public ActionResult AddPhone(int ContactId)
{
    var newPhone = new Phone();
    Contact ct = ctx.Contacts.Find(ContactId);
    ct.Phones.Add(newPhone);
    ctx.SaveChanges();
    return View(newPhone);
}

您还需要执行EditPhone和DeletePhone操作。

至于[必需]属性,您要么需要删除它们,要么完全重新考虑您的视图。您不能在不进行任何输入的情况下仅使用所需属性"addphone"。在绑定之前,您需要从用户那里获得输入,而我目前还没有看到您为此做出任何努力。