无法转换TempData的内容

时间:2015-05-14 14:48:04

标签: c# asp.net-mvc-4 visual-studio-2012 casting .net-4.0

我有一些奇怪的东西。 我的MVC4项目在TempData中转换模型对象的内容时遇到了问题。我可以使用监视窗口看到TempData中正确定义的对象,但是转换失败,没有任何异常。

是否有配置/项目设置会混淆/ TempData中的内容?

例如,给出一个简单的模型:

namespace NewProject.Models
{
    public class MyList
    {
        public List<string> Cars { get; set; }
    }
}

以下代码无法将对象强制转出

    Models.List l = new Models.MyList();
    List<string> cars = new List<string>();
    cars.Add("VW");
    cars.Add("Ford");
    l.Cars = cars;
    TempData["Cars"] = l;


    Models.MyList _cars = (Models.MyList)TempData["Cars"];

以上代码适用于一个全新的项目,但不在我的主项目中,在上面的_cars上设置手表列为

    The name '_cars' does not exist in the current context  

......演员阵容发生后。即它甚至不是空的..

如果我使用session而不是TempData,就会发生同样的事情。

更新:

  • 请注意,上面列出的代码应该有效 - 没有任何内容 特别错误。
  • 我可以创建一个新项目,它可以正常运行。它根本不适用于我的(主要)Web​​项目。
  • 在VS2013 Express for Web中打开时的同一项目显示相同 症状 - 即它根本不是铸造的。因此它不是VS2012 具体问题。

4 个答案:

答案 0 :(得分:1)

试试

var _cars = TempData["Cars"] as List<string>;

var _cars= (List<string>)TempData["Cars"];

第一个更好。

答案 1 :(得分:1)

我不确定现在是否为时已晚。通常,我使用ViewBag之类的可转换功能。您将 TempData [“ YourTempData”] 分配给 ViewBag.YourVewBag 。然后,您可以进行投射。

1)将TempData [“ YourObject”]分配到ViewBag中:

ViewBag.YourNewViewBag = TempData["YourObject"];

2)消耗ViewBag:

var objVariable = ViewBag.YourObject as List<YourClass>;
foreach(var item in objVariavle)
{
    //...........
}

这就是我的方法,ViewBag是可转换的。

答案 2 :(得分:0)

尝试

Models.MyList _cars = TempData["Cars"] as Models.MyList;

此异常的更多内容与变量声明的范围和上下文相关。检查变量范围是否存在于添加监视表达式的位置。

答案 3 :(得分:0)

问题不在于此代码。该错误与投射无关。它在字面上告诉你,你在不存在的情况下引用_cars。这通常是由于使用类似if语句的内容。例如:

if (something)
{
    var foo = "bar";
}

var baz = foo; // Error!

要修复它,您需要首先在父作用域中定义变量:

string foo;

if (something)
{
    foo = "bar";
}