2012-03-22 40 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