2012-03-22 6 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 plugin я делаю его похожим на дерево). Однако я не уверен, как сделать флажки, чтобы они связывались. Обычно я бы использовал строго типизированный html-помощник, но я просто не знаю, как он будет выглядеть так, как он хочет получить значение bool.

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

public ActionResult (FrmVm vm) 
{ 
} 

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

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

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

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

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

Edit 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' и остановки, что а [х] .b [г] .c [у] nonesense. – asawyer

+0

Я мог бы, но обычно, что приводит к тому, что все имеют одинаковый идентификатор (когда вы используете сильно типизированные помощники). Как вы видите, я пытался много способов. – chobo2

+0

Можете ли вы посмотреть и/или отправить данные, отправленные jQuery? – kendaleiv

ответ

0

Когда ваш viewmodel имеет свойство, определенное как 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

Я, но я не понимаю, как мои объекты смотрят на сторону модели. Будет ли у меня 3 списка bools по одному для каждого уровня? – chobo2

+0

@ chobo2 - См. Раздел «Редактирование», мой ответ выходит за рамки комментария. –

+0

Как этот класс будет соответствовать тем, которые у меня уже есть. Мне нужно сохранить эту структуру, поскольку мне нужно делать логику. например, если они выбирают US, Food, Pizza Hut, мне нужно будет сохранить этот стресс, что в основном будет FrmVm -> GroupedStoresVm (есть страна) -> StoreGroupingVm (информация о группировке) -> StoreVm (имеет информацию о магазине). Поэтому мне нужно знать всю информацию. С вашими 2 отдельными ящиками я бы не знал, как выровнять информацию. – chobo2

Смежные вопросы