1

私のASP.net MVC 3(nopcommerceベースの)アプリケーションでは、ユーザーがリストから自分の場所を選択し、この選択が動的な価格計算のためにセッションに保存されていることを確認する必要があります。複数のエントリポイント(ホームページ、検索結果、Googleのインデックス付きページなど)が存在する可能性があるため、ユーザーが商品を表示しようとするとすぐに、場所の選択(ポップアップの場合もあります)が表示されるようにします。価格があるかもしれないページ。特定のセッションでは、これは1回限りの選択である必要があります。

特定のセッション変数が存在するかどうかのチェックを実行するのに最適なイベントハンドラー(Application_BeginRequest??)は何でしょうか?

4

3 に答える 3

4

アクションフィルターを使用して、セッションの値を確認し、場所がまだ保存されていない場合はビューにリダイレクトできます。キャプチャすると、元のビューにリダイレクトできます。

何かのようなもの:

public class CheckLocationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var location = filterContext.HttpContext.Session["Location"];

        if (string.IsNullOrWhiteSpace(location))
        {
            // store the requested URL for use once location has been chosen
            filterContext.Controller.TempData["ReturnToUrl"] = filterContext.HttpContext.Request.Url;

            // redirect to location choice view
            filterContext.Result = new RedirectResult(VirtualPathUtility.ToAbsolute("~/Location/Choose"));
        }
    }
}

次に、必要に応じてコントローラー/アクションでこの属性を使用します。

public class SomeController : Controller
{
    [CheckLocation]
    public ActionResult Index()
    {
        // location has been checked so continue

        return View();
    }
}
于 2012-12-31T06:39:36.870 に答える
0

アクションフィルターを使用して、セッション変数をグローバルにチェックできます。ただし、リダイレクトせずに特定のページに選択UIを表示する場合は、それを裏付けるアクション(Html.RenderAction()など)を含む部分ビューを使用することをお勧めします。

この選択UIをユーザーに表示するビュー内で、RenderActionヘルパーを呼び出します。アクションはセッション変数をチェックします。セッション変数が存在するかどうかに応じて、アクションのモデル値を設定し、partialをtrue/falseに設定します。次に、そのモデル値の部分ビューチェックを行い、それに応じて選択UIを表示します(つまり、値がユーザーが選択を行う必要があることを示している場合はポップアップを表示します)。

于 2012-12-31T06:42:17.983 に答える
0

コントローラのアクションで、次のことを確認できます。

if(HttpContext.Current.Session["Shown"] == null){
    HttpContext.Current.Session["Shown"] = true;
    // turn on a flag for client to know it should show popup
}
于 2012-12-31T06:49:56.070 に答える