2015-09-04 25 views
0

我有兩個ActionResults,我想只是簡單地從一個的ActionResult傳遞到另一個INT ID。我試圖使用tempdata,但在查看調試器的值後,該值爲零。我看到的tempdata示例使用redirecttoaction()。這可以通過returnview()使用TempData的與returnview()

public ActionResult Details(int? id) 
    { 
     myEMSurvey mySurvey = db.myEMSurveys.Find(id); 
     if (mySurvey == null) 
     { 
      return HttpNotFound(); 
     } 
     SurveyViewModel svm = new SurveyViewModel(); 
     svm.mySurvey = mySurvey; 
     svm.Questions = (from s in db.myEMSurveyQuestions 
         where s.SurveyID == id 
         select s).ToList(); 
     svm.Options = (from o in db.myEMQuestionOptions 
         where o.SurveyID == id 
         select o).ToList(); 
     svm.Anwsers = (from a in db.myEMSurveyAnswers 
         where a.SurveyID == id 
         select a).ToList(); 
     int intid = id.Value; 
     TempData["ID"] = intid; 
     return View(svm); 
    } 

    [HttpPost] 
    public ActionResult CsvDownload() 
    { 
     int id = Convert.ToInt32(TempData["ID"]); //value of id=0, TempData["ID"] = 33 

     var Anwsers = (from a in db.myEMSurveyAnswers 
        where a.SurveyID == id 
        select a).ToList(); 
     //id = 0 
    } 

CsvDownload詳細信息視圖:

@using (Html.BeginForm("CsvDownload", "Survey", FormMethod.Post)) 
{ 
<div class="text-center"> 
    <input type="submit" name="button" value="Download" class="btn btn-success" /> 
</div> 
<br />} 
+1

TempData只存在於當前請求的生命週期中。目前還不清楚你如何在上面調用'CsvDownload'。這兩個單獨的職位是後? –

+1

在Action方法之間重定向時,TempData只是可靠和有用的。你可以考慮在這裏使用Session變量或Hidden輸入或其他構造。 –

+0

@GeorgeJohnston我已經更新了我的問題和來自我的詳細信息視圖的信息。感謝您的評論! – user2133925

回答

0

在我的代碼中的錯誤是INT32的轉換。

相反,我需要像這樣轉換:

int id = (int)(TempData["ID"]); 

這被稱爲 「拆箱」。它是從物體到整體的直接投射。