如何将Viewdata传递给控制器​​中的所有视图?

时间:2009-09-01 05:01:31

标签: asp.net-mvc

我有一个下拉列表,可以选择一个值

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Screenname(FormCollection collection)
    {
        Viewdata["screenname"] = collection[0];

        return RedirectToAction("Index", new { ScreenName = ViewData["screenname"] });
    }

然后我想在其他操作中访问此ViewData

   [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection collection, string screenname)
    {
        try
        {
            /// thats my dataobject which creates 

            DataObj.SaveData(Guid.Empty, collection, screenname);

            return RedirectToAction("Index", new { ScreenName = ViewData["screenname"] });
        }
        catch
        {
            return View("Error");
        }
    }

其中index看起来像这样......

    public ActionResult Index(string ScreenName)
    {
        ///thats my list 
        GetTable = new GetDataTable(ScreenName);

        return View(GetTable);
    }

首先,当我选择值并且索引正确执行....但是当我尝试再次访问viewdata时它不包含值,所以任何人如果请帮助... 或者保存和检索数据的替代方法。

3 个答案:

答案 0 :(得分:2)

ViewData对象特定于正在执行的特定操作。要在操作之间传递数据,请使用TempData。更多关于MSDN上的the difference between the two

您还可以通过Controller.Session属性直接写入会话状态。

答案 1 :(得分:1)

这实际上在这里经常被涵盖。现在的解决方案是在使用RedirectToAction()之前使用TempData来保存所需的数据。

如果你搜索“RedirectToAction”,你会发现很多关于这个主题的帖子,such as this one

该框架的下一个正式版本将解决这个问题。

答案 2 :(得分:-1)

我使用视图从用户获取数据,然后将其保存到静态变量,然后使用此变量将数据传递给所有其他视图。

非常感谢