2017-05-08 50 views
0

我是ASP.NET的初學者,試圖通過使用控制器中的臨時數據來獲取ViewBag中的數據。我在user.Usernameuser.Email得到它,但分別沒有得到ViewBag.NameViewBag.Email。我的代碼在下面給出,請指導我如何在ViewBag中獲取它?ASP.NET:在ViewBag中訪問臨時數據

QuestionsContoller.cs

public class temp { 
    public string username { get; set; } 
    public string email { get; set; } 
} 

public ActionResult Question() { 
    return View(); 
} 

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Question(User user) { 
    temp temp_user = new temp(); 
    temp_user.email = user.Email; 
    temp_user.username = user.Username; 
    return RedirectToAction("Answers" , temp_user); 
} 

public ActionResult Answers(temp temp_user) { 
    User user = new Models.User(); 
    user.Username = temp_user.username; 
    user.Email = temp_user.email; 
    ViewBag.Name = user.Username; 
    ViewBag.Email = user.Email; 
    return View(user); 
} 
+0

你是什麼意思_「我怎樣才能在ViewBag?」_?你想讓你的ViewBag數據進入你的視圖嗎? – CodeNotFound

+0

是的,之後我會在我的視圖中獲得它。 –

+0

所以你需要知道將數據導入視圖,對吧? – CodeNotFound

回答

1

你不能用一個有效載荷重定向。重定向是一個空的響應,通常有一個302狀態碼和一個Location標題,指示下一個應該請求的URL。客戶端在收到此類響應後,通常會繼續併爲該URL發出新的請求。重要的是,客戶不會知道或不在意將任何附加數據與此請求一起傳遞,因此您無法強制執行類似於您的temp對象的內容。

如果你需要保留請求之間的數據,你可以把它添加到TempData

TempData["temp_user"] = temp_user; 

然後取它的行動你重定向到通過:

var temp_user = TempData["temp_user"] as temp; 

或者(和最好),你只需簡單地重定向到用戶標識,然後再簡單地查找用戶。應儘可能避免使用會話(其中TempData)。

return RedirectToAction("Answers", new { userId = user.Id });