在MVC 5 Web应用程序中,我有一个带有Html.BeginForm
注释的ActionResult。该页面按预期工作,既可以使用Html.ActionLink
,也可以通过链接到带有[HttpPost]
参数的页面。页面正确加载并正确读取和使用参数。
我想做的唯一调整就是让查询字符串不显示在浏览器的URL地址栏中。我查找了相关的SO问题,但我所看到的只是处理逆情况。
这主要是出于美观和好奇心。当提出问题时,"为什么要删除查询字符串?"我的回答是," ActionResult需要查询字符串才能正确处理,但用户不需要查看它,并且绝对不需要带有查询字符串的书签。&# 34;
在我的情况下,我的网址如下所示:
http://localhost:64400/StudentRosters/FilterableIndex?SelectedCampus=PRA&SelectedFiscalYear=FY12
我希望它看起来像这样(没有查询字符串的URL):
我可以通过让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
注释,即使我只是查询而不是更改数据。我错过了任何明显或简单的东西吗?
答案 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;
}
以便我可以隐藏地址栏中的查询字符串并不违反任何编码规则。