更改ASP.NET中的会话变量和重新加载页面

时间:2015-05-20 09:25:48

标签: asp.net asp.net-mvc

我使用ASP.NET MVC进行某些数据库查询,并且有一个会话变量,用于选择查询应该使用的数据库部分。现在我想在每个页面上都有一个下拉菜单,允许更改会话变量。更改后,应重新加载当前页面并使用新值。

现在我可以为我的控制器上的每个动作实现这个,但我更喜欢更通用的方法。我的想法是更改会话变量,然后在用户单击下拉菜单中的选项时重新加载用户所在的页面。

如何在ASP.NET中实现这样的功能?

2 个答案:

答案 0 :(得分:4)

您可以使用HttpRequest.UrlReferer属性。在某个控制器中创建单个操作:

public class SomeController : BaseController
{
    public ActionResult Change(int value)
    {
        Session["Value"] = value;
        return Redirect(Request.UrlReferer.ToString());
    }
}

答案 1 :(得分:0)

另一种情况是在OnActioniExecuting方法中处理参数并设置会话参数值。

控制器:

public class HomeController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        if( Request.RequestType == WebRequestMethods.Http.Post && !string.IsNullOrEmpty( Request.Form.Get( "sessionParameter" ) ) )
        {
            Session["sessionParameter"] = Request.Form.Get("sessionParameter");
        }
        //set parameter and process it later as you want 
        ViewBag.SessionParameter = Session["sessionParameter"];
    }
}

HTML示例:

Current value: @ViewBag.SessionParameter

<form action="/" method="post">
    <select name="sessionParameter" id="ddl">
        <option value="1" @(ViewBag.SessionParameter == "1" ? "selected" : "")>1</option>
        <option value="2" @(ViewBag.SessionParameter == "2" ? "selected" : "")>2</option>
        <option value="3" @(ViewBag.SessionParameter == "3" ? "selected" : "")>3</option>
    </select>
</form>

<script>
    var ddl = document.getElementById('ddl');
    ddl.onchange = function() {
        document.forms[0].submit();
    };
</script>