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

Model list becomes null when passing the view model to another method

我正在使用 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)除外,它们为空,然后我得到一个错误。 我错过了什么?是垃圾收集器吗?

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

所有其他字段都通过并且列表变为空的原因。

你有两种方法可以解决这个问题:

  1. edusworkplace保存在服务器端的一个store中,然后用ExternalLoginConfirmation方法取回。

  2. 在您的视图中使用 @HiddenFor 将列表作为表单的一部分插入,因此您将在 ExternalLoginConfirmation 方法中获取它们。

    编辑

您有另一种方法来保存和获取数据。 使用会话对象。

Session["edus"] = edus

然后在下一个控制器中通过强制转换将其取回。

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