C# int为null,但TempData不是?
我需要在两个动作结果之间传递一些数据,所以我想我应该试试C# int为null,但TempData不是?,c#,asp.net-mvc,tempdata,C#,Asp.net Mvc,Tempdata,我需要在两个动作结果之间传递一些数据,所以我想我应该试试TempData(我对MVC很陌生,所以请耐心等待)。这就是我尝试过的: public ActionResult Edit(Companies companies, HttpPostedFileBase file) { if (ModelState.IsValid) { try {
TempData
(我对MVC很陌生,所以请耐心等待)。这就是我尝试过的:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
TempData["Companies"] = companies;
return RedirectToAction("bgcTest2", "Companies");
现在存储了临时数据。要检索它,请执行以下操作:
public ActionResult bgcTest2(string BolagsID, Companies companies)
{
try
{
companies = TempData["Companies"] as Companies;
int test = companies.BolagsID;
现在问题来了<代码>公司。BolagsID有一个值,但test
始终为空。为什么?我该如何修复它
编辑:
我注意到一件很奇怪的事;在尝试Darin Dimitrovs的建议时,或者在尝试时,如果我只在返回空值的行上放置断点,则直到返回空值后的行才中断。好像那行被注释掉了,根本不执行。欢迎来到暮色地带
EDIT2:
第二个例子:
[HttpPost]
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
// non related stuff
return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID});
以及:
我仍然认为“测试在当前上下文中不存在”
EDIT3:
拿两个就行了。我的变量在声明时为null
,因为我从未在任何地方使用过它们。我想我会一步一步地去做,但显然,在某些情况下,你必须要做几步才能看到它们中的任何一个起作用
经验教训:确保使用声明的变量,否则它们将
null
我建议您不要使用TempData,因为它依赖于会话。如果您只需要这个BolagsID
,只需将其作为参数传递即可:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID });
然后:
public ActionResult bgcTest2(int bolagsID)
{
... use the bolagsID here directly
}
不幸的是,您无法使用这种方法传递复杂对象。但是,您可以将此对象保留在数据存储中,并仅将id传递给目标控制器操作,该操作将允许您在重定向后从此数据存储中检索它。我建议您不要使用TempData,因为它依赖于会话。如果您只需要这个
BolagsID
,只需将其作为参数传递即可:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID });
然后:
public ActionResult bgcTest2(int bolagsID)
{
... use the bolagsID here directly
}
不幸的是,您无法使用这种方法传递复杂对象。但是,您可以将此对象保留在数据存储中,并仅将id传递给目标控制器操作,该操作将允许您在重定向后从此数据存储中检索它。如何将
test
设置为null,其int
不是int?
?我不知道,但在调试和“添加监视”时在int test
上,给我空值。这就是wierd。您是否检查了天气公司是否从TempData[“companys”]中获得了一些值?是的,正如所述companys。BolagsID
有一个值,但我在调试器的该行后面得到了“名称测试在当前上下文中不存在”。是否有名为companys
的控制器?bgcTest2
在那个控制器下吗?test
怎么可能是空的,它的int
不是int?
?我不知道,但是当调试和int test
上的“添加手表”时给我空的。这就是wierd。您是否检查了天气公司是否从TempData[“companys”]中获得了一些值?是的,正如所述companys。BolagsID
有一个值,但我在调试器的该行后面得到了“名称测试在当前上下文中不存在”。是否有名为companys
的控制器?bgcTest2
是否在该控制器下?使用您的示例,在观看时仍会显示“名称“test”在当前上下文中不存在”:(在我在回答中发布的代码示例中,您在哪里看到了test
?哦,对不起,您在哪里写了“…在这里直接使用bolagsID”我尝试了int test=bolagsID;
,只是想看看我是否会得到一个值。但是您提到的错误消息与此代码无关:“当前上下文中不存在名称“test”
。我假设您试图在其他上下文中使用此test
变量。很抱歉,没有看到您的代码,很难提供帮助。@Christopherén,稍加更正,它不是在MVC中,而是在C中。使用您的示例仍然会让我感到”“观看时”的当前上下文中不存在名称“test”。(在我在回答中发布的代码示例中,您在哪里看到了test
?哦,对不起,您在哪里写了“…直接在这里使用bolagsID“我尝试了int test=bolagsID;
,只是想看看我是否能得到一个值。但是您提到的错误消息与此代码无关:“名称“test”在当前上下文中不存在”
。我假设您正试图在其他上下文中使用此测试变量。抱歉,没有看到您的代码,很难提供帮助。@Christopherén,稍作修改,它不是在MVC中,而是在C中。