将viewmodel传递给actionresult会创建新的viewmodel

时间:2012-07-01 15:12:43

标签: c# asp.net-mvc-3 entity-framework

我正在使用一个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)});
        }

    }

出了什么问题,我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:0)

我使用

找到了列表的部分解决方案

for和[i]而不是foreach

但是即使使用int Id而不是对象

,对象仍然为null

还尝试使用Html.hiddenfor,因为这些对象不起作用

答案 1 :(得分:0)

您需要将所有列表和属性包含在明确定义的模型中。

在POST操作中获取viewmodel后,执行操作(创建,编辑等等),如果希望返回相同视图(具有后期操作),则需要重新填充所有列表值(如下拉菜单和复选框列表)并在返回的viewmodel上设置它们。

答案 2 :(得分:0)

本文中使用的方法可能是您的解决方案:

http://erraticdev.blogspot.com/2010/09/preparing-list-of-objects-so-they-can.html