我正在尝试在MVC中使用会话状态,我整个晚上都被困住了! 我意识到会话状态应该在MVC中谨慎使用 - 但我确信我想在这一页中使用它 - 所以会很感激解决方案而不是意见。
基本上,我有一张带有CAPTCHA图像的联系表格。当页面加载时,我想将会话设置为CAPTCH图像中使用的字符(动态生成的图像)。 我有一个“新图像”链接,异步创建一个新代码,设置会话并动态地将新图像加载到屏幕。
只要页面未加载或重新加载,会话就会保留设置。我需要能够根据会话中的代码验证用户输入(这应该反映显示给用户的内容),但会话是空的。
如果我在图像上执行AJAX重新加载,即异步设置会话 - 当我执行帖子时设置会话!!
发生了什么事?
我需要能够持久保存会话值 - arrrhhhh!
我有一个基本控制器:
public new HttpContextBase HttpContext
{
get
{
HttpContextWrapper context = new HttpContextWrapper(System.Web.HttpContext.Current);
return (HttpContextBase)context;
}
}
在控制器中我有:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Contact(ContactForm c, string button)
{
string sessCaptcha = HttpContext.Session["CAPTCHA_Contact"] == null ? "" : HttpContext.Session["CAPTCHA_Contact"].ToString();
}
任何想法?????在上面用樱桃很漂亮:)
谢谢!
答案 0 :(得分:4)
我现在很尴尬......
永远不要在Response.End()之前设置会话值(我相信这同样适用于response.redirect)。
OMG - 那是4个小时我永远不会再回来了!以下是演示我无能的演示代码......
public ActionResult Page1()
{
Session["test1"] = "hello world";
// This means the session won't be set
// It's is used in valid circumstances..e.g. setting session, then dynamically generating an image based on that value.
Response.End();
return View();
}
public ActionResult Page2()
{
ViewBag.Test = Session["test1"].ToString();
return View();
}
[HttpPost]
public ActionResult Page2(FormCollection fc)
{
ViewBag.Test = "...is still..." + Session["test1"].ToString();
return View();
}
答案 1 :(得分:0)
您可能希望了解如何使用TempData对象
http://blog.donnfelker.com/2010/02/26/aspnet-mvc2-tempdata-now-persists/