我有一些奇怪的东西。 我的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,就会发生同样的事情。
更新:
答案 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";
}