Я в настоящее время работаю над веб-страницей в 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);
}
Что я делаю неправильно?
Вы должны всегда пытаться закорачивания код настолько, насколько это возможно, пост только то, что вы подозреваете, что проблема может быть, чтение такой длинный вопрос не очень удовольствие многим людям. –
Почему «RiskAssessmentTypesWithItems'a' struct'? –
Я действительно не знаю, что колледж написал эту часть, и он на празднике – user3061558