【发布时间】:2013-08-22 15:13:33
【问题描述】:
经过良好测试后的重大更新
我有一个 MVC4 Web 应用程序,我只是在 Visual Studio 2010 中调试它,只是为了了解有关 Web 开发(尤其是 MVC)的更多信息。我现在正在玩 Session。但我不明白为什么在一个新的 httprequest 之后我会丢失我的变量。
就像这个问题:Losing my session variables
我的会话部分的 web.config 如下所示:
<sessionState mode="InProc"
cookieless="false"
timeout="20"/>
我用来隔离问题的小测试项目工作正常,看起来像:
控制器 - 家庭控制器
public class HomeController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
string t = (string)Session["Test1"];
ViewBag.Result = t;
return View();
}
}
-
我的会话控制器
公共类 MysessionController : 控制器 { // // GET: /Mysession/
public ActionResult Index() { return View(new Models.Mysession() {ID = Session.SessionID}); } [HttpPost] public ActionResult Index(Models.Mysession mySession) { Session["Test1"] = "Bla"; return RedirectToAction("Index", "Home"); } }
型号
public class Mysession {
[Required]
public string ID { get; set; }
}
观看次数
-
首页
-
索引.cshtml
@{ ViewBag.Title = "索引"; }
索引
@@ViewBag.Result@ @((string)Session["Test1"]) @Html.ActionLink("我的会话", "索引", "我的会话")
-
-
我的会话
-
索引.cshtml
@model SessionTest.Models.Mysession @{ ViewBag.Title = "索引"; }
索引
@using (Html.BeginForm()) {
@Html.ValidationSummary(false) <fieldset> <legend>Mysession</legend> <div class="editor-label"> @Html.LabelFor(model => model.ID) </div> <div class="editor-field"> @Html.EditorFor(model => model.ID) </div> <p> <input type="submit" value="Log in" /> </p> </fieldset>}
-
这看起来就像我的主应用程序一样,区别在于:在设置会话变量的 HTTPPOST 索引操作中的 MysessionController 中,我访问一个 XML 文件以查找某些内容。
XML 文件是我的持久存储,因为我没有 SQL 服务器。我的问题是,这会影响我的会话吗?
如果是这样,我想指出我在设置会话中的变量之前访问 XML 文件。所以我觉得很奇怪。但是我通过测试确定了如果我不访问 XML 文件,那么会话中的变量就可以了。如果我访问 XML 文件,则会话中的变量在 RedirectToAction 之后为空。
我不知道为什么我昨天没有得出这个结论。对不起大家。我昨天做了一些草率的测试。
【问题讨论】:
-
重做步骤 3 到 5 的具体操作是什么?
-
@Grumbler85 感谢您的回复。对不起,我第一个不清楚。我编辑了我的问题。这更清楚了吗?
-
否 - 你用浏览器做什么?是同一个例子吗?它是VS打开的浏览器的新标签吗?您是否使用调试器跟踪代码?
-
见主帖更新。
-
@TLRonin 你没有写任何关于浏览器的东西
标签: asp.net-mvc session asp.net-mvc-4