2013-12-03 3 views
0

Я в настоящее время работаю над веб-страницей в asp.net MVC5 со сложной datamodel, которая должна быть связана. структура кода моделей:массив в массиве не будет связывать .net C#

public struct RiskAssessmentTypesWithItems 
{ 
    public RiskAssessmentItemType Type; 
    public CheckBoxVM[] ItemCheckBoxVMs; 
} 
public class ItemsForRiskAssessmentViewModel 
{ 
    public int RiskAssessmentId { get; set; } 
    public RiskAssessment RiskAssessment { set; get; } 
    public RiskAssessmentTypesWithItems[] RiskAssessmentTypesWithItems { set; get; } 
} 
public class CheckBoxVM 
{ 
    public bool  Checkbox{ get; set; } 
    public Int64 Id  { get; set; } 
    public string Label { get; set; } 

} 

RiskAssessmentTypesWithItems, кажется, связаны правильно, но элементы в объекте являются недействительными. Я не могу заставить его работать после нескольких попыток.
Поля, которые должны быть связаны в объектах посылаются с запросом, см пост-секцию запроса, взятые из хрома:

RiskAssessmentTypesWithItems [0] .Type.Id: 15 RiskAssessmentTypesWithItems [0 ] .ItemCheckBoxVMs [0] .Checkbox: истинные RiskAssessmentTypesWithItems [0] .ItemCheckBoxVMs [0] .Checkbox: ложные

Мой HTML код страницы:

<h2>@Model.RiskAssessment.Description</h2> 
@using (Html.BeginForm()) 
{ 
<div class="form-horizontal"> 
@Html.AntiForgeryToken() 

    @for (int index = 0; index < Model.RiskAssessmentTypesWithItems.Length; index++) 
    { 
    @Html.HiddenFor(m => m.RiskAssessmentTypesWithItems[index].Type.Id) 

    RiskAssessmentTypesWithItems typesWithItems = Model.RiskAssessmentTypesWithItems[index]; 
    <h3> @typesWithItems.Type.Description </h3> 
    <br/> 

    for (int itemIndex = 0; itemIndex < typesWithItems.ItemCheckBoxVMs.Length; itemIndex++) 
    { 
     CheckBoxVM itemCheckBoxVM = typesWithItems.ItemCheckBoxVMs[itemIndex]; 
     @Html.CheckBoxFor(m => m.RiskAssessmentTypesWithItems[index].ItemCheckBoxVMs[itemIndex].Checkbox, new { @id =itemCheckBoxVM.Id}) 
     @itemCheckBoxVM.Label 
     @Html.HiddenFor(m => m.RiskAssessmentTypesWithItems[index].ItemCheckBoxVMs[itemIndex].Id) 
     <br /> 
    } 
    } 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" [email protected] class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
} 

И это мой контроллер:

public ActionResult SetItemsForRiskAssessment(int riskAssessmentId) 
{ 
    RiskAssessment riskAssessment=Database.RiskAssessments.GetRiskAssessment(riskAssessmentId); 
    var vm = new ItemsForRiskAssessmentViewModel {RiskAssessment = riskAssessment}; 
    var riskItems =Database.RiskAssessmentItems; 
    List<RiskAssessmentTypesWithItems> tmpList= new List<RiskAssessmentTypesWithItems>(); 
    foreach (RiskAssessmentItemType iType in Database.RiskAssessmentItemTypes.GetRiskAssessmentItemTypes()) 
    { 
     var typeWithItems = new RiskAssessmentTypesWithItems 
     { 
      Type = iType, ItemCheckBoxVMs = riskItems.GetRiskAssessmentItems().Where(i => i.RiskAssessmentItemTypeId == iType.Id).Select(raItem => new CheckBoxVM {Id = raItem.Id, Label = raItem.Name + " " + raItem.Description}).ToArray() 
     }; 
     if(typeWithItems.ItemCheckBoxVMs!=null && typeWithItems.ItemCheckBoxVMs.Any()) 
      tmpList.Add(typeWithItems); 
    } 
    vm.RiskAssessmentTypesWithItems = tmpList.ToArray(); 
    return View(vm); 
} 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult SetItemsForRiskAssessment(ItemsForRiskAssessmentViewModel vm) 
{ 
    RiskAssessment riskAssessment = Database.RiskAssessments.GetRiskAssessment(vm.RiskAssessmentId); 

    return SetItemsForRiskAssessment(riskAssessment.Id); 
} 

Что я делаю неправильно?

+4

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

+0

Почему «RiskAssessmentTypesWithItems'a' struct'? –

+0

Я действительно не знаю, что колледж написал эту часть, и он на празднике – user3061558

ответ

0

Я нашел решение. изменив этот код:

public struct RiskAssessmentTypesWithItems 
    { 
     public RiskAssessmentItemType Type; 
     public CheckBoxVM[] ItemCheckBoxVMs; 
    } 

To:

public class RiskAssessmentTypesWithItems 
    { 
     public RiskAssessmentItemType Type { get; set; } 
     public CheckBoxVM[] ItemCheckBoxVMs { get; set; } 
    } 
Смежные вопросы