以上就是给各位分享在SpringMVC3.1中重定向后如何读取Flash属性?,其中也会对springmvc重定向url进行解释,同时本文还将给你拓展asp.net-mvc–MVC在提交按钮单击后登录
以上就是给各位分享在Spring MVC 3.1中重定向后如何读取Flash属性?,其中也会对springmvc重定向url进行解释,同时本文还将给你拓展asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据、asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?、asp.net-mvc – 在ASP.NET MVC中重定向后发布、asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 在Spring MVC 3.1中重定向后如何读取Flash属性?(springmvc重定向url)
- asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据
- asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?
- asp.net-mvc – 在ASP.NET MVC中重定向后发布
- asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)
在Spring MVC 3.1中重定向后如何读取Flash属性?(springmvc重定向url)
我想知道如何在Spring MVC 3.1中重定向后读取flash属性。
我有以下代码:
@Controller@RequestMapping("/foo")public class FooController { @RequestMapping(value = "/bar", method = RequestMethod.GET) public ModelAndView handleGet(...) { // I want to see my flash attributes here! } @RequestMapping(value = "/bar", method = RequestMethod.POST) public ModelAndView handlePost(RedirectAttributes redirectAttrs) { redirectAttrs.addFlashAttributes("some", "thing"); return new ModelAndView().setViewName("redirect:/foo/bar"); }}
我缺少什么?
答案1
小编典典使用Model
,它应该预先填充Flash属性:
@RequestMapping(value = "/bar", method = RequestMethod.GET)public ModelAndView handleGet(Model model) { String some = (String) model.asMap().get("some"); // do the job}
或者,您也可以使用RequestContextUtils#getInputFlashMap
:
@RequestMapping(value = "/bar", method = RequestMethod.GET)public ModelAndView handleGet(HttpServletRequest request) { Map<String, ?> inputFlashMap = RequestContextUtils.getInputFlashMap(request); if (inputFlashMap != null) { String some = (String) inputFlashMap.get("some"); // do the job }}
PS你可以做回return new ModelAndView("redirect:/foo/bar");
在handlePost
。
编辑 :
JavaDoc说:
调用该方法时,RedirectAttributes模型为空,除非该方法返回重定向视图名称或RedirectView,否则永远不要使用它。
它没有提到ModelAndView
,所以也许将handlePost更改为返回"redirect:/foo/bar"
字符串或RedirectView
:
@RequestMapping(value = "/bar", method = RequestMethod.POST)public RedirectView handlePost(RedirectAttributes redirectAttrs) { redirectAttrs.addFlashAttributes("some", "thing"); return new RedirectView("/foo/bar", true);}
我RedirectAttributes
在我的代码中使用RedirectView
和model.asMap()
方法,效果很好。
asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据
解决方法
更新:如果您需要保留表单数据(这不经过测试,仅编译),下面应该包含自定义属性的代码,该属性将捕获表单数据
public class CustomAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization( AuthorizationContext filterContext) { if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { string loginUrl = "/Account/Login"; //Get this from web.config instead of hardcode if (filterContext.HttpContext.Request != null) { loginUrl += "?ReturnUrl=" + filterContext.HttpContext .Request .Url .AbsoluteUri; foreach(var formData in filterContext.HttpContext.Request.Form) { loginUrl += "&"+formData.ToString(); } } filterContext.Result = new RedirectResult( loginUrl ); } } }
您可能需要对登录后期操作进行一些修改.返回表单获取操作也应该从uri字符串[FromUri]获取表单数据并再次呈现表单.
asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?
在我的global.asax.cs中我得到了:
BundleTable.Bundles.AddDefaultFileExtensionReplacements(); BundleTable.Bundles.AddDefaultIgnorePatterns(); BundleTable.Bundles.AddDefaultFileOrderings(); Bundle scripts = new Bundle("~/Scripts"); scripts.IncludeDirectory("~/Scripts","*.js"); BundleTable.Bundles.Add(scripts); Bundle css = new Bundle("~/Content/css"); css.IncludeDirectory("~/Content/css","*.css",false); BundleTable.Bundles.Add(css);
我尝试了一些不同的配置而没有任何改进.
然后在我的布局中我得到了:
<link href="@BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" /> <script src="@BundleTable.Bundles.ResolveBundleUrl("~/Scripts")"> </script>
当页面加载它看起来很体面的网址时:
<link href="/Content/css?v=QAsFYXHCbnaU70oGVxpgi9py9iKQrT9C4BVNdHa7xoI1" rel="stylesheet" type="text/css" />
但该网址重定向到:
/Content/css/
返回404找不到错误…
有人有任何想法吗?
解决方法
asp.net-mvc – 在ASP.NET MVC中重定向后发布
以下场景:
>用户进入/ controller / index,要求他填写表格.
>表单值被POST到/ controller / calculate.
> Calculate操作根据输入执行计算,并实例化包含操作结果的复杂对象.此对象存储在TempData中,用户被重定向到/ controller / result.
> / controller / result从TempData检索结果并将其呈现给用户.
这种方法的问题在于,如果用户在查看/ controller / result中的结果时点击F5,则由于TempData已过期且结果对象不再可用,因此无法再呈现页面.
用户不希望出现这种行为.一种可能的解决方案是在POST之后重定向,而不是渲染结果视图.现在,如果用户点击F5,他会得到一个浏览器对话框,询问他是否要重新发布表单.这也是不希望的.
我想到的一个可能的解决方案是序列化结果对象并在重定向之前将其传递给URL,但AFAIK对GET请求的长度有一些限制,如果对象变得很大,我可能会遇到这种限制(特别是如果base64编码) ).
另一种可能性是使用Session对象而不是TempData来持久保存结果.但在实施此解决方案之前,我想知道是否有更好的方法.
更新:
进一步研究这个问题我发现如果我将结果对象重新放在/ data / result动作中的TempData中,它实际上是有效的:
public ActionResult Result() { var result = TempData["result"]; TempData["result"] = result; return View(result); }
但这感觉很脏.这种方法是否会产生任何副作用(例如切换到进程外会话提供程序,因为目前我使用的是InProc)?
解决方法
asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)
public ActionResult Index() { return PartialView(); } [HttpPost] public ActionResult Index(FormModel input) { ... return //Redirect to the same route }
谁知道怎么做?
解决方法
return Redirect(HttpContext.Request.UrlReferrer.OriginalString);
我们今天的关于在Spring MVC 3.1中重定向后如何读取Flash属性?和springmvc重定向url的分享已经告一段落,感谢您的关注,如果您想了解更多关于asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据、asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?、asp.net-mvc – 在ASP.NET MVC中重定向后发布、asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)的相关信息,请在本站查询。
本文标签: