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中。我该怎么做?
首先,我想看看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"。在绑定之前,您需要从用户那里获得输入,而我目前还没有看到您为此做出任何努力。