asp.net-mvc-2 – 在ASP.Net MVC 2中的整个站点中保持查询字符串
HTTP:www.site1.com/ SID = 555
我希望能够保持sid参数和值,无论是发布表单还是单击链接. 如果用户导航到实现分页的视图,则应在sid之后添加查询字符串中的其他参数. ?HTTP:www.site1.com/ SID = 555安培;页= 3 我怎样才能在Asp.Net Mvc 2中实现这一目标? [编辑] 我在顶部提到的url将是应用程序的入口点,因此sid将包含在链接中. 在应用程序链接中,例如: <%= Html.ActionLink("Detail","Detail",new { controller = "User",id = item.UserId })%> 应该去: 这个问题与Dave提到的不同,因为查询字符串参数在整个站点中持续存在. 解决方法
首先,我要说的是,如果值需要在整个会话期间保持不变,那么您应该将其存储在Session中并检查它在每个动作调用中是否仍然有效.这可以通过添加到所需控制器/操作的自定义操作属性来完成.如果该值是必需的,那么当检查该值时,您可以重新登录到登录页面或类似内容(如果不存在或已过期).
无论如何,那说我认为我会努力工作.我的第一个想法是创建一个自定义操作过滤器属性,该属性获取querstring的值并将其存储在OnActionExecuting的会话中,然后OnResultExecuted将该键添加回查询字符串.但是,由于Request中的QueryString是只读集合,因此无法直接执行. 那么,现在可以使用什么? 选项#1 – 手动将其添加到对Html.ActionLink()的所有调用中 要么 … 选项#2 – 覆盖ActionLink的一个版本,它会自动为您添加值.这可以像这样实现.我不建议这样做. 从自定义属性开始. public class PersistQueryStringAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var sid = filterContext.RequestContext.HttpContext.Request.QueryString["sid"]; if (!string.IsNullOrEmpty(sid)) { filterContext.RequestContext.HttpContext.Session["sid"] = sid; } base.OnActionExecuting(filterContext); } } 所有这一切都是检查所需密钥的请求查询字符串,如果可用,则将其添加到会话中. 然后,您将ActionLink扩展方法覆盖到您自己的方法中,该方法会添加值. public static class HtmlHelperExtensions { public static MvcHtmlString ActionLink<TModel>(this HtmlHelper<TModel> helper,string text,string action,string controller,object routeValues) { var routeValueDictionary = new RouteValueDictionary(routeValues); if (helper.ViewContext.RequestContext.HttpContext.Session["sid"] != null) { routeValueDictionary.Add("sid",helper.ViewContext.RequestContext.HttpContext.Session["sid"]); } return helper.ActionLink(text,action,controller,routeValueDictionary,null); } } 在将要调用的每个操作上应用属性(或将其应用于控制器),例如: [PersistQueryString] public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } 注意 当查询值进入会话时,它将应用于会话的生命周期.如果要检查值是否存在且每个请求都相同,则需要在属性覆盖方法中进行一些检查. 最后 我纯粹是把它做成“可以做到”的练习.我强烈建议不要这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 条件ASP.NET MVC剃刀部分
- asp.net-mvc – 在布局视图中获取当前的ApplicationUser
- ASP.NET性能优化之局部缓存分析
- asp.net – 如何在一个新的选项卡中打开asp:HyperLink.Nav
- 如何配置ASP.NET OutputCache与http vs https不同?
- asp.net – 内联JavaScript的外部JavaScript文件
- asp.net-mvc-3 – Request.Url何时可以为null?
- asp.net-core – 如何在Asp.net核心服务类中调用View组件?
- ASP.NET API版本控制
- asp.net-mvc-4 – 动态更改jQuery不显眼的验证属性