Session variables 会话变量值在WebMatrix中的网页上不可用
我想在我的WebMatrix网页中使用Session variables 会话变量值在WebMatrix中的网页上不可用,session-variables,webmatrix,Session Variables,Webmatrix,我想在我的WebMatrix网页中使用会话变量 由于未知原因,在页面间不可用(仅适用于定义它们的页面) 在我的登录页面的代码部分: if (WebSecurity.Login(userName, password, rememberMe)) { // Session variable holding the UserType var db = Database.Open("MyDatabase"); var userTypeData = db.QuerySingle(
会话变量
由于未知原因,在页面间不可用(仅适用于定义它们的页面)
在我的登录页面的代码部分:
if (WebSecurity.Login(userName, password, rememberMe)) {
// Session variable holding the UserType
var db = Database.Open("MyDatabase");
var userTypeData = db.QuerySingle("SELECT Name FROM UserTypes INNER JOIN UserProfiles ON UserProfiles.UserTypeId = UserTypes.UserTypeId WHERE UserId = @0",WebSecurity.CurrentUserId);
Session ["UserType"] = userTypeData.Name;
// Eventual redirection to the previous URL
var returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl.IsEmpty()) {
Response.Redirect("~/auth/authenticated");
}
else {
Context.RedirectLocal(returnUrl);
}
我在这里得到一个“无法对空引用执行运行时绑定”
,因此如果总是存在用户类型。这是第一个问题
在重定向的“authenticated”页面中,如果我使用完全相同的查询和会话变量定义,我可以将其显示为:
You are a user of type: @Session["UserType"] -> HTML section
在其他页面上,我试图通过会话变量“显示或隐藏(更新)按钮”
@if (Session["UserType"]=="here the variable value; a string") {
<a class="linkbutton" href="condoedit?condoId=@condoData.CondoId">Update</a>
}
@if(Session[“UserType”]=“此处为变量值;字符串”){
}
按钮从不显示,因为会话变量显示为空
更改代码以测试查询是否存在问题(顺便说一句,如果只需要用户名,请使用QueryValue而不是QuerySingle)
试试像这样的东西
var db = Database.Open("MyDatabase");
var userTypeData = db.QueryValue("SELECT Name FROM UserTypes INNER JOIN UserProfiles ON UserProfiles.UserTypeId = UserTypes.UserTypeId WHERE UserId = @0",WebSecurity.CurrentUserId);
if (String.IsNullOrEmpty(userTypeData)) {
Session["UserType"] = "IsEmpty";
} else {
Session["UserType"] = userTypeData;
}
并在其他页面上测试会话变量值是否为“IsEmpty”
编辑
在其他页面中,转换为字符串会话变量值并将其存储到局部变量中
var uType = Session["UserType"].ToString();
当项目存储在会话中时,它存储为对象数据类型,因此如果对象和原始类型之间没有隐式转换,则需要将其转换回其原始数据类型。() ->会话[“UserType”]
.ToString()
@if(Session[“UserType”].ToString()=“此处为变量值;字符串”){
}尝试这种方式{var newObj=Session[“UserType”];}然后检查if条件。尝试使用
Session[“UserType”]”读取会话变量值。ToString()
而不是Session[“UserType”]
。如果从if条件中取出该值->@Session[UserType]单独工作,则该值将显示在其他页面上。我们至少知道问题在哪里!会话变量是一个对象(SQL查询的结果),if条件测试字符串。也许这里需要一些演员?是的。就是这样。请编辑您的解决方案,我将接受它。顺便说一下,我还有其他一些问题没有回答。如果你有空闲时间;-)我又回来了。几分钟后,我遇到了以下错误:对象引用未设置为对象的实例。第109行:@if(会话[“UserType”].ToString()=“Syndic”){button link}。我登出并再次登入,它似乎已经消失了。但是要多久?你知道如何防止这种情况吗?在每个页面上声明另一个变量以保存会话变量的值?
@if (Session["UserType"].ToString()=="here the variable value; a string") {
<a class="linkbutton" href="condoedit?condoId=@condoData.CondoId">Update</a>