为什么Request.Url中包含查询字符串?

时间:2012-05-29 15:59:16

标签: asp.net-mvc asp.net-mvc-3 request

在我的某个页面上,我允许用户根据他们从年龄下拉列表中选择的年龄来过滤内容。

这是我的代码。

$('#age').change(function () {
         var ageUrl = "@Request.Url?age=" + $(this).val();

         alert(ageUrl);
         window.location = ageUrl;
     });

这是问题所在。我在应用页面上。

http:// localhost:60627 / apps

第一次,我选择一个年龄并重定向,没问题。

http:// localhost:60627 / apps?age = Middle_School

第二次,我选择另一个。

http:// localhost:60627 / apps?age = Middle_School?age = Preschool

在查询字符串中,年龄出现两次。我尝试了Request.Url或Request.RawUrl,总是包含querystring。我应该使用什么才能获得没有查询字符串的页面网址。

4 个答案:

答案 0 :(得分:7)

我之前没有真正使用它,但确实有效:

 Request.Url.GetLeftPart(UriPartial.Path)

另一种选择是:

 String.Format("{0}://{1}{2}",Request.Url.Scheme, Request.Url.Authority, Request.Url.LocalPath)

如果您知道您所使用的控制器/操作(来自ViewContext的数据),您可以使用@ Url.Action并指定重载以强制生成完整URL的http模式。

答案 1 :(得分:1)

为什么不尝试使用Split字符串方法?

Request.Url.ToString().Split('?')[0]

答案 2 :(得分:1)

您为什么要自己构建网址?让MVC为你做:

@Url.Action("Action", "Controller", new { age = "Preschool" })

如果年龄不是路线的一部分,那么它将自动添加到查询字符串中:

http://localhost:12345/Controller/Action?age=Preschool

答案 3 :(得分:0)

这不是Request的属性,但它可以为您提供解决方案。 https://stackoverflow.com/a/2541083/969829