如何通过MVC3中的会话获取值

时间:2012-05-24 02:43:26

标签: asp.net-mvc-3 session

我正在经历一个非常奇怪的问题。

我在第一页上有一个下拉列表,所以我从下拉列表中选择一个值,然后单击一个按钮 点击后我移动到另一个页面,所以在该页面上我使用它并从第一页的下拉列表中获取所选值:

 int hobbyid = Convert.ToInt32(formcollection["Hobby"]);

现在问题是新页面位于标签下。

所以当点击第一页上的按钮时,它会移动到这个标签,但是如果我去其他页面,然后通过点击它的tab来点击这个页面。现在formcollection方法不会给我任何价值。我应该如何解决这个问题?
我可以使用会话来解决这个问题吗? 但我不知道如何使用它。请帮助我

2 个答案:

答案 0 :(得分:0)

如果你想保持导航的爱好,你必须把它保存在某个地方。一种方法是保持在查询字符串中。即:当您移动到第一个选项卡时,将hobbyid作为qyerystring的一部分传递,然后在那里读取并设置为该页面中所有相关链接(指向您想要业余爱好者的页面)的qyerystring部分。那么如果formcollection [“hobby”]为null,你应该从查询字符串中读取值。

另一种方法是使用会话。因此,每当使用从dropdwon中选择一个项目并提交时,将其设置在会话变量上并从那里访问它。

Session["selectedHobby"]="some value read from the form"; 

答案 1 :(得分:0)

您可以使用ASP.net TempData。

TempData仅适用于用户的会话,并且只有在我们读取它之后它才会持续存在,然后在请求结束时清除它。可以使用TempData当数据需要在两个请求或重定向方案之间持续存在时。

商店:

[HttpPost]
  public ActionResult MyAction(UserInfo user) {


   TempData["Hobby"] = User.Hobby;//In USerInfo view model Hobby property is of type string or int depends on what you need)

 return RedirectToAction("Index");

}

在视图中重复它:

<div>
 @if (TempData["Hobby"] != null) {

 <p>Hobby: @TempData["Hobby"]</p>

 }
</div>