RAZOR视图中Get方法的友好URL

时间:2013-12-10 17:19:42

标签: asp.net-mvc asp.net-mvc-4 url razor query-string

嗨我在剃刀中有一个页面可以对信息进行排序,每当我需要对搜索进行一些更改时,我必须通过QueryString传递值,我有很多理由这样做。

现在我的网址看起来像这样:

https://localhost:44300/Reports/TitleSearch/SearchDirectTarade/DirectTradeExclusive?Input.SelectedMarket=DirectTradeExclusive&Input.SelectedProduct=131&Input.SelectedIssuer=&Input.SelectedOperation=C&Input.SelectedSubjacentGroup=&Input.SelectedSubjacent=US0028962076&Input.SelectedStrike=#

我希望看起来像这样:

https://localhost:44300/Reports/TitleSearch/SearchDirectTarade/DirectTradeExclusive

我还需要通过查询字符串传递所有这些参数,所以 有可能在MVC4 Razor页面中使我的URL更加用户友好吗?

4 个答案:

答案 0 :(得分:0)

@Url.Action('MyAction', 'MyController', 
    new { Input.SelectedMarket = DirectTradeExclusive, 
          Input.SelectedProduct = 13 } )

答案 1 :(得分:0)

如果像你说的那样,“每当我需要对搜索进行一些更改时,我必须通过QueryString传递值”,那么你没有别的选择,只能在QueryString中传递它们。

如果您不想在URL中使用参数,则可以在更改搜索时使用POST,也可以在cookie或会话中设置它们。

答案 2 :(得分:0)

这里的主要问题是为什么你想让这个网址用户友好?
如果您的主要目标是允许用户稍后发送/存储此链接以模拟相同的请求,那么您已经解决了问题。在其他情况下,如果您想要让用户记住短网址,那么您必须减少搜索参数的数量,或者对搜索网址进行哈希处理(例如bit.ly)。 基本上,我可以考虑一些解决方案:
如果您不需要通过网址进行重复搜索:

  • 隐藏POSTed值中的查询参数
  • 隐藏cookie或httpheaders中的查询参数(小心,一些firewals过滤未知标题)

如果您希望搜索具有重复性:

  • 将查询参数移至网址路径(您可以在路由中将其标记为可选)
  • (我最喜欢的)保持原样,或者只是缩短查询参数的名称

基本上,如果您没有有限数量的搜索选项而且没有必要的登陆页面(搞砸了SEO),那么获取搜索结果并将搜索参数放入查询字符串中是很常见的(谷歌是一个最着名的例子)

答案 3 :(得分:0)

你可以改变URL逻辑或patteren&默认值App_Start / Route_Config文件中的值

默认模式可以更改。