0

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

由于未知的原因,它们是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!!

4

2 回答 2

1

更改代码以测试查询是否存在问题(顺便说一句,如果您只需要用户名,请使用 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();
于 2012-09-27T16:18:03.360 回答
0

当 item 存储在 session 中时,它被存储为 object 数据类型,因此如果 object 和原始类型之间没有隐式转换,则需要将其转换回其原始数据类型。(mikesdotnetting.com

-> 会话[“用户类型”].ToString()

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

}

于 2012-09-30T09:11:16.043 回答