2009-09-01 2 views
0

у меня есть выпадающий список, выберите значениеКак передать thw Viewdata ко всем представлениям в моем контроллере?

[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"); 
     } 
    } 

где индекс выглядит так ...

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

     return View(GetTable); 
    } 

Сначала, когда я выбираю значение, и индекс выполняется правильно .... но когда я пытаюсь снова получить доступ к видам данных, он не содержит значения, так что кто-нибудь, если он может помочь ... или альтернативный метод для сохранения и извлечения данных.

+0

НЕ использовать принятый в настоящее время ответ (статическая передача переменных). –

ответ

-1

Я использовал представление, чтобы взять данные от пользователя, а затем сохранил его в статической переменной, а затем использовал эту переменную для передачи данных ко всем другим представлениям.

Thanks anyways

+2

Ужасно !!! решение. Каждый пользователь получит тот же набор статических переменных, и если другой пользователь обратится к странице между переадресацией второго пользователя, тогда второй пользователь получит первое значение. НЕ ИСПОЛЬЗУЙТЕ ЭТОГО ЛЮБОГО. –

1

Это на самом деле довольно часто покрыто здесь. Решением на данный момент является использование TempData для сохранения необходимых данных, прежде чем использовать RedirectToAction().

Если вы выполните поиск по «RedirectToAction», вы найдете ряд сообщений, посвященных этой теме, such as this one.

Следующий официальный релиз рамки исправит это.

+0

Даже когда я использую tempdata, я не могу получить доступ к данным. он по-прежнему остается нулевым. я уже пробовал, что ... любые другие варианты – lucky

+0

плюс у меня есть еще несколько действий, которые я хочу передать данным, поэтому, пожалуйста, помогите кому-нибудь помочь – lucky

2

Объект ViewData предназначен для конкретного действия, которое выполняется. Для передачи данных между действиями используйте TempData. подробнее на the difference between the two на MSDN.

Вы также можете напрямую написать в состояние сеанса через свойство Controller.Session.

+1

Я пробовал данные по темпу, но он, похоже, не работает ... – lucky

Смежные вопросы