我正在使用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然后我收到错误。 我错过了什么?它是垃圾收集器吗?
答案 0 :(得分:1)
因为您从HTML页面调用了ExternalLoginConfirmation
,
您的模型将仅绑定您在表单中的字段。
这是所有其他字段都通过的原因,列表变为空。
您有两种方法可以解决此问题:
将edus
和workplace
保存在服务器端的商店中,然后使用ExternalLoginConfirmation
方法将其恢复。
在您查看中使用@HiddenFor将列表作为表单的一部分插入,因此您将使用ExternalLoginConfirmation
方法获取这些列表。
修改强>
您还有另一种方法可以保留和获取数据。 使用会话对象。
Session["edus"] = edus
然后你带着演员把它带回下一个控制器。
var edus = (List<Education>)Session["edus"]