将视图模型传递给另一个方法时,模型列表变为null

时间:2017-02-28 13:11:25

标签: c# asp.net-mvc asp.net-mvc-viewmodel

我正在使用ASP.NET MVC5

我的ExternalLoginConfirmationViewModel包含以下内容:

 public List<Education> edus { get; set; }
 public List<Experience> workplaces { get; set; }

在我的AccountController中我声明了这样的列表:

public List<Education> edus;
public List<Experience> workplaces;

然后我在ExternalLoginCallBack中填充它们没有问题(已调试且它们是预期的)

在底部,我正在尝试创建模型并将其传递给“ExternalLoginConfirmation”,如下所示:

 return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel
                    {
                        Email = loginInfo.Email,
                        FirstName = ExternalLoginLinkedIn.FirstName,
                        LastName = ExternalLoginLinkedIn.LastName,
                        Country = ExternalLoginLinkedIn.Country,
                        Summary = ExternalLoginLinkedIn.Summary,
                        LinkedinPictureUrl = ExternalLoginLinkedIn.LinkedinPictureUrl,
                        Gender = ExternalLoginLinkedIn.Gender,
                        Birthday = ExternalLoginLinkedIn.Birthday,
                        edus = edus,
                        workplaces = workplaces

                    });

到目前为止,在这里设置一个断点显示了要按预期填充的模型,教育和工作场所都有正确的列表。

现在是下一个方法的时间:

 public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)

ExternalLoginConfirmationModel包含除两个列表(edus和workplaces)之外的所有数据,它们为null然后我收到错误。 我错过了什么?它是垃圾收集器吗?

1 个答案:

答案 0 :(得分:1)

因为您从HTML页面调用了ExternalLoginConfirmation, 您的模型将仅绑定您在表单中的字段。

这是所有其他字段都通过的原因,列表变为空。

您有两种方法可以解决此问题:

  1. edusworkplace保存在服务器端的商店中,然后使用ExternalLoginConfirmation方法将其恢复。

  2. 在您查看中使用@HiddenFor将列表作为表单的一部分插入,因此您将使用ExternalLoginConfirmation方法获取这些列表。

    修改

  3. 您还有另一种方法可以保留和获取数据。 使用会话对象。

    Session["edus"] = edus

    然后你带着演员把它带回下一个控制器。

    var edus = (List<Education>)Session["edus"]