2012-03-22 34 views
0

我有這些視圖模型。如何模型綁定?

public class MasterFrmVm 
{ 
    public Guid Id { get; set; } 
    public IList<FrmVm> FrmVms { get; set; } 

    public MasterFrmVm() 
    { 
     RewardTierFrmVm = new List<RewardTierFrmVm>(); 
    } 
} 

public class FrmVm 
{ 
    public Guid Id { get; set; } 
    public IList<GroupedStoreVm> GroupedStoresVm { get; set; } 

    public FrmVm() 
    { 
     GroupedStoresVm = new List<GroupedStoreVm>(); 
    } 
} 

public class GroupedStoreVm 
{ 
    public string CountryName { get; set; } 
    public string CountryId { get; set; } 
    public IList<StoreGroupingVm> StoreGroupingVms { get; set; } 

    public GroupedStoreVm() 
    { 
      StoreGroupingVms = new List<StoreGroupingVm>(); 
    } 
} 

public class StoreGroupingVm 
{ 
     public string Name { get; set; } 
     public Guid Id { get; set; } 
     public IList<StoreVm> StoreVms { get; set; } 
} 

public class StoreVm 
{ 
     public Guid Id { get; set; } 
     public string Name { get; set; } 
} 


@foreach (var f in Model.FrmVm) 
{ 
     @Html.Partial("GenerateTier", f) 
} 


//GenerateTier 
    @model FrmVm 
    <ul class="storeTree"> 
    @for (int i = 0; i < Model.GroupedStoresVm.Count; i++) 
    { 
        <li> 
         <input type="checkbox" name="@Model.GroupedStoresVm[i]" value="@Model.GroupedStoresVm[i].CountryId" />@Model.GroupedStoresVm[i].CountryName 
         <ul> 
           @for (int x = 0; x < Model.GroupedStoresVm[i].StoreGroupingVms.Count; x++) 
          { 
           <li> 
            @Html.CheckBox(Model.GroupedStoresVm[i].StoreGroupingVms[x].Name , false, new { value = Model.GroupedStoresVm[i].StoreGroupingVms[x].Id }) @Model.GroupedStoresVm[i].StoreGroupingVms[x].Name         
            <ul> 
             @for (int z = 0; z < @Model.GroupedStoresVm[i].StoreGroupingVms[x].StoreVms.Count; z++) 
             { 
              <li>@Html.CheckBox(Model.GroupedStoresVm[i].StoreGroupingVms[x].StoreVms[z].Name, false)@Model.GroupedStoresVm[i].StoreGroupingVms[x].StoreVms[z].Name </li> 
             } 
            </ul> 
           </li>          
          }      
         </ul>     
        </li>   
       } 
       </ul> 

我基本上是做一個複選框樹(然後使用jQuery插件我使它看起來像一棵樹)。不過,我不知道如何使複選框,使他們綁定。通常我會使用強類型的HTML幫助器,但我不知道它會如何看起來,因爲它需要一個布爾值。

所以我嘗試了非強類型的幫助器,只是HTML,但我不知道如何使它,所以當我有我的控制器綁定。

public ActionResult (FrmVm vm) 
{ 
} 

我正在使用jquery並將其序列化並通過Ajax發送。

編輯

我還忘了提FrmVm是另一種視圖模型,因爲它太也可以有很多。

@foreach (var f in Model.FrmVm) 
{ 
    @Html.Partial("GenerateTier", f) 
} 

什麼然後有我上面顯示的代碼。現在添加到我的代碼。

編輯2

這是我的螢火看到

FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.a=a 
&FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.a=false 

&FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.3=70563225-2718-40ec-8a71-a01500a66183 
&FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.3=false 

&FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.1=dbd43e7e-86e4-4fa1-9e48-a01a00db151c 
&FrmVm%5Bd06a6c21-1796-4fb5-9af5-cbf973c6c820%5D.1=false 

的結構將是(當然,他們將複選框)

-a 
    - 3 
    -1 

不知道爲什麼它說,他們是全部都是假的,因爲我檢查了他們。

+0

你也許可以用'foreach'和停止一個[X] .B [Z]。ç[Y] nonesense。 – asawyer 2012-03-22 22:38:20

+0

我可以但通常會導致一切都具有相同的ID(當你使用強類型助手)。正如你所看到的,我嘗試了很多方法。 – chobo2 2012-03-22 22:39:15

+0

你可以看看和/或張貼由jQuery發送的數據嗎? – kendaleiv 2012-03-22 22:42:24

回答

0

當您的視圖模型的屬性定義爲bool時,助手@Html.EditorFor(model => model.boolProperty)將自動生成一個複選框。

迴應你的評論,也許這樣?

public class myViewModel 
{ 
List<boolNames> firstList { get; set; } 
List<boolNames> anotherList { get; set; } 
} 

public class boolNames 
{ 
public string Name { get; set; } 
public int GUID { get; set; } 
public bool checkBox { get; set; } 
} 

視圖

@for(int i = 0 ; i < Model.firstList.Count ; i++) 
{ 
<div id="@(Model.firstList[i].GUID)"> 
<span>@Model.firstList[i].Name</span> 
<span>@Html.EditorFor(model => model.firstList[i].checkBox)</span> 
</div> 
} 
+0

雅但我不明白我的對象woudld如何看待模型方面。我會爲每個級別有3個布爾名單嗎? – chobo2 2012-03-22 22:55:53

+0

@ chobo2 - 查看編輯,我的回覆超出了評論範圍。 – 2012-03-22 23:17:31

+0

這個課程將如何與我已有的課程相匹配。我需要保持這種結構,因爲我需要做邏輯。例如,如果他們選擇美國,食品,必勝客,我需要保持這種結構,基本上是FrmVm-> GroupedStoresVm(有國家的東西) - > StoreGroupingVm(分組信息) - > StoreVm(有商店信息)。所以我需要知道所有的信息。用你的2個獨立的盒子,我不知道如何調整信息。 – chobo2 2012-03-23 16:08:52