2013-02-22 83 views
0

我有兩個實體: 1)學生 和2)地址。如何爲兩個相關實體創建視圖和視圖模型

public class Student 
{ 
    Public Int StudentId { get; set; } 
    Public String FullName { get; set; } 

    Public virtual IList<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    Public Int AddressId { get; set; } 
    Public Int StudentId { get; set; } 
    Public String FullAddress { get; set; } 

    Public virtual Student Student { get; set; } 
} 

每個學生可能有零個或多個地址。

我想爲這兩個實體創建單個視圖。我知道必須創建一個視圖模型。這是視圖模型。

public class StudentViewModel 
{ 
    Public Int StudentId { get; set; } 
    Public String FullName { get; set; } 
    public Address AddAddressModel { get; set; } 

    Public virtual IList<Address> Addresses { get; set; } 
} 

我創建了一個StudentViewModel視圖。這是StudentViewModel:

@model MyProject.Models.StudentViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FullName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FullName) 
      @Html.ValidationMessageFor(model => model.FullName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.AddAddressModel.FullAddress) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.AddAddressModel.FullAddres) 
      @Html.ValidationMessageFor(model => model.AddAddressModel.FullAddres) 
     </div> 

     <button id="add">add address to list</button> 

     <input type="submit" value="save in database" />   
</fieldset> 

請告訴我,我怎麼能對一個在StudentViewModel的地址屬性添加一個或多個地址,這種操作對用戶後顯示。最後當我點擊「保存數據庫」按鈕的學生和他的地址必須插入數據庫。

回答

1

我在過去提交了嵌套的子實體,但是這總是通過API調用完成的,表單在提交之前被序列化爲JSON對象。

因爲你只有真正需要多個FullAddress值,你可以相應地改變你的模型和視圖(未測試):

型號:

public class StudentViewModel 
{ 
    public int StudentId { get; set; } 
    public string FullName { get; set; } 
    public string[] Addresses { get; set; } 
} 

查看:

在你的看法,當你點擊'添加'按鈕時,確保(通過JavaScript)你最終得到這樣的東西:

<textarea name="Addresses[]">Some Address 1</textarea> 
<textarea name="Addresses[]">Some Address 2</textarea> 
etc... 
+0

謝謝CornéM創建模板,但我想用我的模型。因爲我想把這個模型擴展到這樣的複雜模型:工廠和他的分支。請告訴我更多關於第一個解決方案:在表單提交之前將表單序列化爲JSON對象 – 2013-02-22 13:15:25

+1

嗨,您可以使用此插件將表單序列化爲複雜的JSON對象:http://stackoverflow.com/a/8407771/1746803。然後,您可以簡單地使用'$ .post()'將對象發送到您的腳本。我已經多次使用這個解決方案和複雜的模型,它還沒有讓我失望。 – Knelis 2013-02-22 15:04:45

0

你可以嘗試使用:

@EditorFor(m => model.Addresses) 

這會爲您的地址模型

+0

謝謝,但更大的問題是如何保存地址bofore點擊「保存數據庫」按鈕,並在點擊後在數據庫中插入這些數據。 – 2013-02-22 13:19:02

+0

是的,當你發佈表單時,你應該在yourviewmodel.Addresses.AddressId或yourviewmodel.Addresses.FullAddress下獲取值 – Rusty 2013-02-22 13:26:46

+0

如何在表單提交之前添加地址列表? jQuery對我有幫助嗎?在創建操作方法後,我想通過編寫model.Addresses訪問學生地址 – 2013-02-22 13:34:28

相關問題