2

ユーザーが最初に登録した後、Webサイト内のプロファイルページに入力する必要があります。以前にプロファイルに入力したことがない場合はログイン中にリダイレクトするように設定しましたが、Webサイト内で別のURLを入力すると、現在、リダイレクト後に好きな場所に自由に移動できます。

ユーザーがプロファイルを完了するまで私のサイトの任意のページにアクセスしようとしたときに、ユーザーにプロファイルページへのアクセスを要求する最良の方法は何ですか?

これは、次のようなもので行うのが最適ですか?'if(!user is verifyed)-redirect to profile page'すべてのコントローラーの上部に配置されていますか?よりエレガントな解決策はありますか?

4

2 に答える 2

4

カスタムアクションフィルター(IActionFilter)の実装から始めます。

public class ProfileRequiredActionFilter : IActionFilter
{
    #region Implementation of IActionFilter

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //TODO: Check if the Authenticated User has a profile.

        //If Authenicated User doesn't have a profile...
        filterContext.Result = new RedirectResult("Path-To-Create-A-Profile");
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }

    #endregion
}

次に、Global.asaxのRegisterGlobalFiltersメソッド内にアクションフィルターをグローバルに登録します。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ProfileRequiredActionFilter());
}

注:このフィルターをグローバルに適用したくない場合は、代わりにActionFilterAttributeを作成して、コントローラーやアクションメソッドに適用できます...

public class ProfileRequiredAttribute : ActionFilterAttribute
{
    #region Implementation of IActionFilter

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        //TODO: Check if the Authenticated User has a profile.

        //If Authenicated User doesn't have a profile...
        filterContext.Result = new RedirectResult("Path-To-Create-A-Profile");
    }

    #endregion
}
于 2012-05-10T21:49:06.203 に答える
3

ベースコントローラを作成し、他のすべてのコントローラにそれを継承させることができます。次に、OnActionExecutingメソッドを次のように記述します...

protected override void OnActionExecuting(ActionExecutingContext context)
{
    base.OnActionExecuting(context);

    // If the user has not filled out their profile, redirect them
    if(CurrentUser != null && !CurrentUser.IsVerified)
    {
        context.Result = new RedirectResult("/User/Profile/" + CurrentUser.ID);
    }
}
于 2012-05-09T11:28:22.583 に答える