我有一个简单的控制器操作,设置一个名为" firm"的会话变量。到我验证的模型。
[HttpPost]
public ActionResult ClientProfile(ClientProfileFormModel model)
{
if (ModelState.IsValid)
{
System.Web.HttpContext.Current.Session["firm"] = model;
return View("ClientProfileConfirmation",model);
}
return View(model);
}
用户点击确认链接后,链接会将其发送到此操作:
public ActionResult ClientProfileConfirmationSubmit()
{
var model = (ClientProfileFormModel)System.Web.HttpContext.Current.Session["firm"];
string emailToAdminBody = GenerateFirmProfileAdminEmail(model);
EmailLogic.Instance.SendEmail("test@test.com", "test@test.com", "Firm profile from " + model.FirmAddress.Name, emailToAdminBody);
return View(model);
}
我的问题是:模型为空。通过调试器,我可以确认"公司"会话变量已设置。但是当输入第二个动作时,会话变量不再存在,并且模型被设置为null。我很难过这可能是什么。我已经在Stackoverflow上搜索了解决方案。
我已经尝试过System.Web.HttpContext.Current.Session []和Session []。
我尝试添加SessionStateModule,就像这个答案所暗示的那样:HttpContext.Current.Session is null when routing requests
我尝试在本地计算机上手动启动ASP状态服务。
我甚至尝试将模型更改为一个简单的字符串,并尝试检索它,没有运气,因此它不会成为导致问题的模型。
答案 0 :(得分:0)
原来我的web.config中没有启用会话。
<configuration>
...
<system.web>
<pages enableSessionState="true">
<controls>
...
</controls>
</pages>
...
<sessionState cookieless="AutoDetect" mode="StateServer" timeout="22" />
</system.web>
...
</configuration>