经过一些良好的测试后的大更新
我有一个 MVC4 Web 应用程序,我只是在 Visual Studio 2010 中对其进行调试,只是为了了解更多关于 Web 开发(尤其是 MVC)的信息。我现在正在玩 Session。但我不明白为什么在一个新的 httprequest 之后我会丢失我的变量。
就像这个问题:Losing my session variables
我的会话部分的 web.config 如下所示:
<sessionState mode="InProc"
cookieless="false"
timeout="20"/>
我用来隔离问题的小测试项目工作正常,看起来像:
控制器 - HomeController
public class HomeController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
string t = (string)Session["Test1"];
ViewBag.Result = t;
return View();
}
}
我的会话控制器
公共类 MysessionController : Controller { // // 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("My session", "Index", "Mysession")
我的会话
索引.cshtml
@model SessionTest.Models.Mysession @{ ViewBag.Title = "Index"; }
指数
@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 之后为空。
我不知道为什么我昨天没有得出这个结论。对不起大家。我昨天做了一些草率的测试。