我正在使用一个viewmodel,然后我将其发送到actionresult使用 (修改后的视图模型)
但是在控制器中,我丢失了viewmodel中的列表和对象。这是我的观点:
@using PigeonFancier.Models
@model PigeonFancier.Models.InschrijvingModel
@using (Html.BeginForm("UpdateInschrijvingen","Melker",Model))
{
<div>
<fieldset>
<table>
@foreach (var item in Model.inschrijvingLijst)
{
<tr>
<td>@Html.DisplayFor(model => item.Duif.Naam)</td>
<td> @Html.CheckBoxFor(model => item.isGeselecteerd)</td>
</tr>
}
</table>
<input type="submit" value="Wijzigen"/>
</fieldset>
</div>
}
这是我的控制器,它直到我可以从视图中获取完整的视图模型时才执行任何操作。
public ActionResult UpdateInschrijvingen(InschrijvingModel inschrijvingsModel)
{
// inschrijvingsModel is not null, but it creates a new model before
it comes here with
//Use the model for some updates
return RedirectToAction("Inschrijven", new { vluchtId =
inschrijvingsModel.vlucht.VluchtId });
}
这是List和其他一些对象变为null的模型,因为它从视图返回到actionresult时会创建一个新模型
public class InschrijvingModel
{
public Vlucht vlucht;
public Duivenmelker duivenmelker;
public List<CheckBoxModel> inschrijvingLijst { get; set; }
public InschrijvingModel()
{
// Without this i get, No parameterless constructor defined exception.
// So it uses this when it comes back from the view to make a new model
}
public InschrijvingModel(Duivenmelker m, Vlucht vl)
{
inschrijvingLijst = new List<CheckBoxModel>();
vlucht = vl;
duivenmelker = m;
foreach (var i in m.Duiven)
{
inschrijvingLijst.Add(new CheckBoxModel(){Duif = i,
isGeselecteerd = i.IsIngeschrevenOpVlucht(vl)});
}
}
出了什么问题,我该如何解决这个问题?
由于
答案 0 :(得分:0)
我使用
找到了列表的部分解决方案for和[i]而不是foreach
但是即使使用int Id而不是对象
,对象仍然为null还尝试使用Html.hiddenfor,因为这些对象不起作用
答案 1 :(得分:0)
您需要将所有列表和属性包含在明确定义的模型中。
在POST操作中获取viewmodel后,执行操作(创建,编辑等等),如果希望返回相同视图(具有后期操作),则需要重新填充所有列表值(如下拉菜单和复选框列表)并在返回的viewmodel上设置它们。
答案 2 :(得分:0)