如何在View加载后删除(或隐藏)查询字符串?

时间:2016-05-15 22:52:38

标签: c# asp.net-mvc

在MVC 5 Web应用程序中,我有一个带有Html.BeginForm注释的ActionResult。该页面按预期工作,既可以使用Html.ActionLink,也可以通过链接到带有[HttpPost]参数的页面。页面正确加载并正确读取和使用参数。

我想做的唯一调整就是让查询字符串不显示在浏览器的URL地址栏中。我查找了相关的SO问题,但我所看到的只是处理逆情况。

这主要是出于美观和好奇心。当提出问题时,"为什么要删除查询字符串?"我的回答是," ActionResult需要查询字符串才能正确处理,但用户不需要查看它,并且绝对不需要带有查询字符串的书签。&# 34;

在我的情况下,我的网址如下所示:

  

http://localhost:64400/StudentRosters/FilterableIndex?SelectedCampus=PRA&SelectedFiscalYear=FY12

我希望它看起来像这样(没有查询字符串的URL):

  

http://localhost:64400/StudentRosters/FilterableIndex

可以通过让ActionResult使用public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } 注释来使查询字符串消失,但我的印象是只应在更改模型中的数据时使用POST (例如,创建或编辑),当你只查询数据时我应该使用GET(在这种情况下我就是这样)。

近四年前的这个SO answer表示如果没有某种中间方法,就不可能在GET方法中显示查询字符串。从那时起有什么变化吗?

在MVC 5上的Microsoft Virtual Academy视频中,我听到其中一位培训师提到Route可用于清理用户在浏览器中看到的URL。他实际上没有展示任何例子,所以我不知道我是否误解了他的陈述。到目前为止,我还没有看到一个示例,其中路由可用于隐藏查询字符串。

我发布了我的路线,以防它有所帮助。

[HttpPost]

我得出的结论是,如果我想隐藏查询字符串,我需要使用dplyr注释,即使我只是查询而不是更改数据。我错过了任何明显或简单的东西吗?

2 个答案:

答案 0 :(得分:0)

您可以添加到ViewBag。或者创建一个模型,您可以在视图中检索该模型,并使用@ Html.HiddenFor将其发送回服务器。

答案 1 :(得分:0)

要添加到@StevenMueke,我从W3C(URIs, Addressability, and the use of HTTP GET and POST)找到了这个文档。

总之,它指出仅在查询时有适当的POST用途:保存敏感信息,以防查询字符串太大以及其他原因。

在我的案例中使用<input id="screen" type="text"> #screen { width: 100%; font-size: 2em; padding: 0 0.5em 0 0.5em; border: solid 1px; text-align: right; } 以便我可以隐藏地址栏中的查询字符串并不违反任何编码规则。