为什么该变量没有得到正确的值?

时间:2019-05-28 17:00:12

标签: c# asp.net-mvc boolean session-variables

我正在尝试在控制器和视图之间传递布尔值,但是在特定情况下,它不起作用,并且我看不到我在做什么错。

在控制器中,我声明了一个变量,使用表达式为其赋予值, 并将该值分配给Session对象。在视图中,我从会话中检索值并将其存储在新的布尔值中。我还以相同的控制器和视图的方式创建了一些其他布尔值。由于某些原因,尽管其他布尔变量可以正常工作,但该布尔变量不能正常工作。

// In the controller:
bool isDatabaseRecipeRevisionSame = true;

// This evaluates to true:
isDatabaseRecipeRevisionSame = editedRecipe.Revision == savedRecipe.Revision;

Session["match"] = isDatabaseRecipeRevisionSame;


// In the view:
bool isRecipeRevisionSame = (bool)Session["match"];

// or:
bool isRecipeRevisionSame =Convert.ToBoolean(Session["match"]);

无论我是否将会话对象强制转换或将其转换为视图中的布尔值,结果均为false。如果将同一个会话对象转换为整数,则得到零,而使用ToString()则得到“ False”。我不了解其中的某些功能会按预期运行,而这一功能则不行。有人可以请教吗?

谢谢。

编辑:评论回复。

Recipe.Revision变量是整数。从数据库中检索savedRecipe,进行编辑并将其作为editedRecipe本地存储。在将编辑内容保存回数据库之前,将再次从数据库中检索saveRecipe.Revision,以确认自从首次检索数据库以来,没有其他人更改过数据库版本。如果修订版本匹配,则将编辑内容保存到数据库。

没有其他线程可以更改这些值,除本人以外,目前没有其他用户在使用此数据库。实际上,我今天已经用一种方法复制了该问题,所以我认为DBro认为它是区分大小写的问题可能是正确的。自发布此问题以来,我已经更改了一些代码以使用ViewBag,因此我可能不必再进行任何修改。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

在您看来,请使用以下HttpContext.Current.Session代替下面的Session

// In the view:
var session = HttpContext.Current.Session["match"];
bool isRecipeRevisionSame = (bool)session;