0

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

这是我的代码。

$('#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,总是包含查询字符串。我应该用什么来只获取没有查询字符串的页面 url。

4

4 回答 4

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 模式。

于 2012-05-29T16:05:39.263 回答
1

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

Request.Url.ToString().Split('?')[0]
于 2012-05-29T16:56:41.683 回答
1

为什么要自己构建 URL?让 MVC 为你做这件事:

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

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

http://localhost:12345/Controller/Action?age=Preschool
于 2012-05-29T17:11:25.503 回答
0

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

于 2012-05-29T16:07:36.730 回答