我有一个MVC控制器,我希望将相同的(静态)信息传递给相同控制器中的任何ActionResult,只能由同一用户在索引页面中的新选项进行更改。我已经读过使用静态变量被认为是不好的做法。我的网站在Intranet环境中使用Windows身份验证,任何时候最多可以有10个人查看任何一个页面。如果我理解我正确阅读的内容,那么静态变量可能会被页面用户以外的其他人覆盖,只需同时查看同一页面即可。
作为替代方案,我读到了“TempData”和“Session Variables”,但到目前为止我还没有看到任何指示这些方法是否能确保变量在Index页面中仅由查看该实例的人设置的内容。这页纸。我在下面粘贴了代码示例,显示了我的意思。我让他们工作,我的问题是哪种方法确保只有查看该页面实例的人设置并读取值?
此代码示例显示了控制器级静态变量的使用:
public class HomeController : Controller
{
public static string _currentChoice;
public ActionResult Index(string CurrentChoice)
{
_currentChoice = string.IsNullOrEmpty(CurrentChoice)?"nothing":CurrentChoice;
ViewBag.Message = "Your choice is " + _currentChoice;
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your choice is still "+_currentChoice;
return View();
}
}
此代码示例使用 TempData 和会话:
public class HomeController : Controller
{
public ActionResult Index(string CurrentChoice)
{
var _currentChoice = CurrentChoice;
_currentChoice = string.IsNullOrEmpty(CurrentChoice)?"nothing":CurrentChoice;
TempData["CurrentChoice"] = _currentChoice;
Session["SessionChoice"] = _currentChoice;
ViewBag.Message = "Your choice is " + _currentChoice;
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your choice is still " + TempData["CurrentChoice"]
+ "\nYour Session choice is " + Session["SessionChoice"];
return View();
}
}
答案 0 :(得分:9)
您将要使用会话。您提供的每个选项都有不同的用例: