0

session variablesWebMatrix Web ページ全体で使用したいと思います。

理由は不明ですが、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

コードを変更して、クエリに問題があるかどうかをテストします (ユーザー名のみが必要な場合は、QuerySingle の代わりに QueryValue を使用してください)。

次のようなものを試してください

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

項目がセッションに格納されると、オブジェクト データ型として格納されるため、オブジェクトと元の型の間に暗黙的なキャストがない場合は、元のデータ型にキャストし直す必要があります。( 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 に答える