【问题标题】:Using TempData with returnview()将 TempData 与 returnview() 一起使用
【发布时间】:2015-09-04 17:25:49
【问题描述】:

我有两个 ActionResults,我试图只是简单地将一个 int id 从一个 ActionResult 传递给其他。我尝试使用 tempdata,但在查看来自调试器的值后,该值为零。我查看的临时数据示例使用了 redirecttoaction()。这可以用 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 />}

【问题讨论】:

  • TempData 只存在于当前请求的生命周期中。目前尚不清楚您如何在上面调用CsvDownload。这两个是独立的回帖吗?
  • TempData 只有在 Action 方法之间重定向时才可靠且有用。您可以考虑在此处使用 Session 变量或 Hidden 输入或其他一些构造。
  • @GeorgeJohnston 我已经用我的详细信息视图中的信息更新了我的问题。感谢您的评论!
  • @user2133925 tempdata 也适用于返回视图,请检查这一行的值 TempData["ID"] = intid;
  • @user2133925 您可以尝试将其转换为 int,请检查您在视图中的值是多少。将其写入您的视图中并查看值 {int i=TempData["ID"]. convertToInt()}

标签: c# asp.net-mvc


【解决方案1】:

我的代码中的错误是转换为 int32。

相反,我需要像这样转换:

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

这称为“拆箱”。这是从 object 到 int 的直接转换。

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多