在ASP.NET MVC 3子集合型号(Model with child collections i

2019-09-16 12:40发布

我想学习ASP.NET MVC 3,从Web窗体背景的。 我试图找出这将是实现我想要什么的MVC的方式,和实际困难的是,我不知道到google一下!

我不能让我的周围头是如何与更复杂的模型工作。 所有的asp.net网站解决办法相当简单的数据对象的教程,并因此而简单的编辑与他们来管理数据。

想象一下,一个假设党的预订应用模型: -

public class Party
{
    public string PartyName {get;set;}
    public DateTime PartyDate {get; set; }

    public ICollection<Guest> Guests {get; set;}
}

public class Guest
{
    public string Name {get; set;}
    public string EmailAddress {get; set;}
}

这里的关键是客人的集合。

我想了解如何实现的,就是如何实现控制器+视图这将让我创造一个党,也同时增加新的客人,在一个单一页面(和最好与来宾添加/删除功能在AJAX -page)。

在asp.net web表单类似的应用程序,它会直截了当地把为客人功能在一个UpdatePanel。 但我不知道如何去在MVC实现这一点。

如果任何人有任何提示,指针或链接到讨论类似主题的文章,我会很感激,

谢谢

Answer 1:

使用jQuery AJAX来处理增加了许多客人。

1)与模型弹出当你点击添加按钮客户,调用,它返回的游客为米的模型对话框的操作方法(jQuery UI的对话是在这里使用)一个选项。 使用AJAX调用后保存数据。 一个成功的情况下,新的客户数据追加到客人的主要形式列表或只使用jQuery负载重新加载部分

2)页内广告素材添加当您单击Add按钮客人,在主窗体本身,显示的形式(您可以动态地创建输入框和保存各种方式从JavaScript按钮)。 保存使用jQuery的阿贾克斯后的数据。 发送数据作为json.As只要参数名与视图模型的属性名相匹配,你的操作方法可以接受数据

你的HTML页面

<a href="#" id="addNew"> Add Guest</a>

<div id="divForm" style="display:none">
    <input type="text" id="txtName" />
    <input type="text" id="txtEmail" />
    <input type="button" id="btnSaveGuest" value="Save"/>
</div>
<ul>

<div id="divGuests"></div>  

在你的脚本

$(function(){
  //Show the hidden form
  $("#addNew").click(function(){
      $("#divForm").fadeIn(300);
  }); 

   //Save the new guest details
   $("#btnSaveGuest").click(function() {
     var name=$("#txtName").val();
     var email=$("#txtEmail").val();
     $.ajax({
        url: '@Url.Action("SaveGuest","Guest")',
        data: {Name: name, EmailAddress :email},
       success: function(data) {

        if(data=="true")
        {
          //Saved successfully.May be append to list of Guest
          $("#divGuests").append("<p>"+name+"</p>");
        }
        else
        {
          //Error. Show msg to user
        }
       }
     });
   });
});

动作方法保存

[HttpPost]
public ActionResult SaveGuest(Guest objGuest)
{
  try
  {
  // read the objGuest property values and Save to db

   return "true";
  }
  catch(Exception e)
  {
     //Log error
     return "false";
  }
}

下面是一个示例应用: http://jsfiddle.net/Qzk3F/16/ (一些值在例如硬编码)



Answer 2:

有许多方法可以做到这一点,但考虑的部分是底层数据库布局。 在创建视图中,可以强烈它输入到党的对象,然后通过客人的收集,你将有机会获得来宾的属性。 然后加入创建客人党模型的方法。 或者你可以有党和来宾有或没有收集不同的模型,然后创建一个捆绑的一方给客人一个视图模型。 然后强类型视图到视图模型。

有可能是更好或“更正确”的方式来做到这一点。



Answer 3:

使用第三容器模型

public class BookingModel
{
  public Party PartyModel { get; set; }
  public Guest GuestModel { get;set; }
}

然后BookingModel绑定到视图,您就可以访问这两个PartyModel和GuestModel

编辑:哎呀只是再次阅读问题。

public class BookingModel
{
  public Party PartyModel { get; set; }
}

然后在你的BookingController有一个方法:

public ActionResult AddGuest(string name)
{
  BookingModel.Guests.Add(new Guest() { Name=name });
}

显然,你需要先BookingModel参考。 如果你愿意,还可以创建guest虚拟机的PartialView或者只是使用一些“绑定”输入。



文章来源: Model with child collections in ASP.NET MVC 3