2012-04-12 111 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。