会话变量值在WebMatrix中的Web页面中不可用

时间:2012-09-27 13:34:02

标签: session-variables webmatrix

我想在我的WebMatrix网页中使用session variables

由于未知原因,它们是not available accross the pages(仅限于定义它们的页面)。

在我的登录页面中,代码部分

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);
    }

我到这里"Cannot perform runtime binding on a null reference",因此总是有一个UserType。这是第一个问题。

在我被重定向的“已验证”页面中,如果我使用完全相同的查询和会话变量定义,我可以将其显示为:

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>    
 }

按钮永远不会显示为session variable appears to be empty !!

2 个答案:

答案 0 :(得分:1)

更改代码以测试查询是否存在问题(BTW,如果只需要用户名,请使用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();

答案 1 :(得分:0)

当项目存储在会话中时,它将作为对象数据类型存储,因此如果对象和原始类型之间没有隐式转换,则需要将其转换回其原始数据类型。 (mikesdotnetting.com

- &GT;会话[ “用户类型”] .ToString()

@if (Session["UserType"].ToString()=="here the variable value; a string") {
            <a class="linkbutton" href="condoedit?condoId=@condoData.CondoId">Update</a>    

}