将视图模型传递给另一个方法时,模型列表变为空
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
,
您的模型将仅绑定表单中的字段。
所有其他字段都通过并且列表变为空的原因。
你有两种方法可以解决这个问题:
将edus
和workplace
保存在服务器端的一个store中,然后用ExternalLoginConfirmation
方法取回。
在您的视图中使用 @HiddenFor 将列表作为表单的一部分插入,因此您将在 ExternalLoginConfirmation
方法中获取它们。
编辑
您有另一种方法来保存和获取数据。
使用会话对象。
Session["edus"] = edus
然后在下一个控制器中通过强制转换将其取回。
var edus = (List<Education>)Session["edus"]
我正在使用 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
,
您的模型将仅绑定表单中的字段。
所有其他字段都通过并且列表变为空的原因。
你有两种方法可以解决这个问题:
将
edus
和workplace
保存在服务器端的一个store中,然后用ExternalLoginConfirmation
方法取回。在您的视图中使用 @HiddenFor 将列表作为表单的一部分插入,因此您将在
ExternalLoginConfirmation
方法中获取它们。编辑
您有另一种方法来保存和获取数据。 使用会话对象。
Session["edus"] = edus
然后在下一个控制器中通过强制转换将其取回。
var edus = (List<Education>)Session["edus"]