2012-04-12 127 views
3

我想学习ASP.NET MVC 3来自web窗体背景。我试图找出MVC实现我想要的方式是什么,而实际的困难是我不知道该怎么去google!ASP.NET MVC中的子集合模型3

我无法理解的是如何使用更复杂的模型。在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中的页面功能)。

在asp.net web窗体中的类似应用程序中,将guest虚拟机的功能放在UpdatePanel中会很简单。但我不知道如何去实现这个在MVC中。

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

感谢

回答

2

使用jQuery ajax来处理添加许多客人。

1)With Model Popup当你点击添加访客按钮时,调用你的Action方法,它在模型对话框中返回m的Guest(jQuery UI对话框是在这里使用的一个选项)。使用ajax post调用保存数据。一个成功的情况下,新的客户数据追加到客人的主要形式列表或只使用jQuery负载

重新加载部分

2)页内广告素材添加当你点击添加客人按钮,在主窗体本身,显示表单(您可以通过各种方式动态创建输入框并从javascript保存按钮)。使用jQuery ajax post保存数据。以json的形式发送数据。只要参数名称与您的视图模型的属性名相匹配,你的操作方法可以接受的数据

你的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/ (有些值在例如硬编码)

0

有许多方法可以做到这,但部分考虑是底层数据库布局。在创建视图时,您可以强制将其输入到Party对象,然后通过来宾集合,您将可以访问来宾属性。然后将创建客人的方法添加到Party模型。或者,您可以为派对和来宾分别设置不同的模型,无论是否有收藏,然后创建将派对与客人联系在一起的视图模型。然后强制输入viewmodel的视图。

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

0

使用第三容器模型

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参考第一。如果您想要或者只是使用一些“未绑定”输入,您也可以为该客户创建一个PartialView。