Как мне модель связать это? - PullRequest
0 голосов
/ 23 марта 2012

У меня есть эти модели просмотра.

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 helper, но я просто не знаю, как это выглядело бы, так как ему нужно значение bool.

Итак, я попробовал и не строго типизированный помощник, и просто HTML, но я не могу понять, как сделать так, чтобы при наличии моего контроллера он связывался.

public ActionResult (FrmVm vm)
{
}

Я использую jquery, сериализую его и отправляю через Ajax.

Редактировать

Я также забыл упомянуть, что FrmVm - это еще одна модель представления, поскольку ее тоже может быть много.

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

что тогда имеет код, который я показал выше. Теперь добавлено в мой код.

Редактировать 2

Вот что я вижу в firebug

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

не уверен, почему он говорит, что все они ложные, когда я их всех проверил.

1 Ответ

0 голосов
/ 23 марта 2012

Если у вашей модели представления есть свойство, определенное как 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...