当我需要将某些数据从一个函数传递给模型中的另一个函数时,我遇到了一个奇怪的问题:
public ActionResult TwoFA(string email, List<PhoneDataContract> phones, bool smsAuth, bool voiceAuth, string appName, string gaid)
{
var model = new TwoFAModel(); <---Break Point
model.EmailAddress = email;
model.Phones = phones;
model.SMSAuthentication = smsAuth;
model.PhoneAuthentication = voiceAuth;
return View("TwoFA", model);
}
public ActionResult Start(string method, string phone, string phone2, string phone3, string Email, string AppName, string Gaid)
{
string[] PhoneList = new String[] { phone, phone2, phone3 };
bool SMSAuth = false;
bool VoiceAuth = false;
var phoneDatas = new List<PhoneDataContract>();
for (int i = 0; i < PhoneList.Length; i++)
{
PhoneDataContract phoneData = new PhoneDataContract();
phoneData.Phone = PhoneList[i];
phoneDatas.Add(phoneData);
}
var num = phoneDatas.Count;
SMSAuth = true;
VoiceAuth = true;
return RedirectToAction("TwoFA", "TwoFA", new { email = Email, phones = phoneDatas, smsAuth = SMSAuth, voiceAuth = VoiceAuth, appName = AppName, gaid = Gaid }); <---- Break point
}
从视图上看,我正在Start
函数中将某些数据传递给模型。然后,从那里,我将这些数据从Start
传递到另一个函数TwoFA
。除了一件事情:phoneDatas
,所有数据都传递得很好。
我尝试过的事情:
我设置了两个断点,并试图对其进行跟踪。在第一个断点之前,我放置了一行var num = phoneDatas.count
以确保for循环按预期运行。然后,在第一个中断点,我将鼠标悬停在参数上,数据就在那。然后,当我进入第二个断点并悬停在TwoFA
函数的参数上时,列表变为空。
为什么?除了列表,其他所有内容都在那里。由于我是C系列语言以及ASP.Net的新手,所以我无法理解这一点。这里有我想念的东西吗?
编辑:该问题与RedirectToAction的工作方式有关。 RedirectToAction仅接受简单的数据结构,例如字符串或整数。对于数组或列表,必须先使用tempData或对其进行序列化。由于我会自己将这个问题标记下来,因此对于任何遇到此问题的人,请参阅kapSir的评论。