1

別のコントローラーのアクションにリダイレクトすると、セッションがnullになります。どうすればよいですか?

4

4 に答える 4

1

あなたが私に投稿したコメントに関して、私が考えていたのはここにあります。セッションが必要なコントローラーでは、次のようなものを使用します。

//Controller A
public class TheController : Controller
{
   public ActionResult Index(){
     Session["yourSession"] = "Hello World";
     return View();
   }
}


//Controller B
public class MyController : Controller
{
    string textString;

    protected override void OnActionExecuting(ActionExecutingContext ctx)
    {
        base.OnActionExecuting(ctx);
        textString = ctx.HttpContext.Session["yourSession"].ToString();
    }

    public ActionResult Index(){
       string currentText = textString;
       return View();
    }
}

(http://stackoverflow.com/questions/889516/session-null-in-asp-net-mvc-controller-constructors)からの提案をテストしたところ、セッションの内容が利用可能でした。

于 2012-08-07T11:58:13.617 に答える
1

このようにログイン時に新しいセッションを設定する前に、すべてのセッションをクリアして破棄していることに気付きました

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Session.Abandon();
Session.Clear();

これらの行を削除すると、@ Claytonが言ったようにすべてが機能し始めたので、これらの行を削除してに置き換えましSession.Remove('sessionvariablename')た。上記の行の原因はまだわかりませんが、コードは機能し始めました。

于 2012-08-13T06:30:05.663 に答える
1

セッションプロパティを使用して一意のベースコントローラーを作成する必要があります。そうすると、プロジェクト内のすべてのコントローラーがそのBaseControllerから継承されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MonitoringCSP.Controllers
{
//[AllowAnonymous]
//[Authorize(Roles = "admin")]
public class BaseController : Controller
{
    private HttpSessionStateBase _session;
    protected HttpSessionStateBase CrossControllerSession
    {
        get
        {
            if (_session == null) _session = Session;
            return _session;
        }
        set {
                _session = Session;
            }
        }
    }
}

使用例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    using System.Web.Security;
    using MonitoringCSP.Models;

    namespace MonitoringCSP.Controllers
    {
[AllowAnonymous]
public class AccountController : BaseController
{
    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
                /*session*/
                CrossControllerSession["UserName"] = User.Identity.Name;
                /*end session*/
        return RedirectToAction("someAction");
        }
   }
}
于 2013-11-12T19:53:06.780 に答える
1

コントローラに次の属性が設定されていないことを確認してください。

[SessionState(SessionStateBehavior.Disabled)]
于 2021-11-19T16:59:29.037 に答える