我使用ASP.NET MVC进行某些数据库查询,并且有一个会话变量,用于选择查询应该使用的数据库部分。现在我想在每个页面上都有一个下拉菜单,允许更改会话变量。更改后,应重新加载当前页面并使用新值。
现在我可以为我的控制器上的每个动作实现这个,但我更喜欢更通用的方法。我的想法是更改会话变量,然后在用户单击下拉菜单中的选项时重新加载用户所在的页面。
如何在ASP.NET中实现这样的功能?
答案 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>