3

私は独自のAccountProfileクラスを ASP.net MVC に実装しましたが、動作しますが、奇妙な問題が発生しています。まず、Views/Shared/_LoginPartial.cshtml で AccountProfile.MyProperty を呼び出しています。AccountProfile.MyProperty は、Membership.GetUser().UserName を呼び出して機能させます。アカウントに「サインアップ」すると、ログイン後に AccountProfile.MyProperty が機能し、情報が HTML ページにレンダリングされます。

ただし、実行を停止し、コードを変更して再度起動すると、メンバーシップに従ってまだログインしているにもかかわらず、Membership.GetUser() は null を返します。

ページの読み込みに失敗した後、/Account/Login ページに移動すると、Membership.GetUser() が機能します。機能した後、最初は機能しなかったインデックス ページに移動できるようになり、機能します。

私の質問は、ページが最初にロードされたときに Membership.GetUser() が null を返すのはなぜですか?

ありがとう。

4

5 に答える 5

2

わかりました、バグのある Membership.GetUser() 関数を回避する方法を見つけました。

HttpContext.Current.User.Identity.Name

このコードはログインしているユーザー名を取得し、実際に機能しているように見えます。何か問題があれば、ここで報告します。

于 2012-09-26T04:21:13.010 に答える
1

次の投稿をご覧ください。おそらく同じ問題を抱えていますか? :

お役に立てれば

于 2012-09-25T03:25:36.407 に答える
0

[InitializeSimpleMembership] をコントローラーに追加

例:

using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using Bencsharp.BL.Services;
using Bencsharp.Mvc.Filters;
using Bencsharp.Mvc.Models;

namespace Bencsharp.Mvc.Controllers
{
    [InitializeSimpleMembership]
    public class HomeController : Controller
    {
        // ...
    }
}
于 2014-02-09T19:41:57.370 に答える
0

同じ問題に遭遇しました。MVC 4 では、デフォルトの認証システムはフィルターを使用して初期化されますInitializeSimpleMembershipAttribute(生成されたプロジェクトのソース コードから明らかです)。また、フィルターはにのみ適用されAccountControllerます (したがって、ログインまたはこのコントローラーの他のページにアクセスすると、認証システムが初期化され、Membership.GetUser()必要な場所で通常どおり使用できます)。

私の現在のプロジェクトでは、迅速で汚い解決策は、次のように定義されたコントローラーを使用することです。

[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}

DefaultControllerまた、コントローラーから直接ではなく、アプリケーションの他のコントローラーを派生させます。また、この手法は、よく使用されるプロパティ (dbcontext 変数など) を 1 か所にまとめておくのにも適しています。

于 2013-07-09T15:08:13.393 に答える