asp.net-mvc – ASP.NET MVC QueryString默认覆盖提供的值?
|
使用ASP.NET MVC Preview 5(虽然这也尝试了beta),似乎querystring默认在路由重写在查询字符串传递的值。重写是这样写一个控制器: public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
路由映射如下: routes.MapRoute(
"test","Test/Foo",new { controller = "Test",action = "Foo",x = 1 });
然后使用此相对URI调用它: /Test/Foo?x=5 我看到的跟踪输出是: 1 5 因此,换句话说,为路由设置的默认值总是传递到方法中,而不管它是否实际上在querystring上提供。请注意,如果删除querystring的默认值,即路由映射如下: routes.MapRoute(
"test",action = "Foo" });
然后控制器按预期运行,并将该值作为参数值传递,给出跟踪输出: 5 5 这看起来像我一个错误,但我会发现这是一个错误仍然可以在ASP.NET MVC框架的beta版本,因为带有默认的querystrings不是完全是一个深奥或边缘情况特征,所以它几乎肯定是我的错。任何想法我做错了什么? 解决方法使用QueryStrings查看ASP.NET MVC的最好方法是将它们视为路由不知道的值。正如你所发现的,QueryString不是RouteData的一部分,因此,你应该保留你传递的一个查询字符串与路由值分开。解决这些问题的一种方法是,如果从QueryString传递的值为null,则在操作中自行创建默认值。 在你的例子中,路由知道x,因此你的url应该看起来像这样: /Test/Foo or /Test/Foo/5 并且路由应如下所示: routes.MapRoute("test","Test/Foo/{x}",new {controller = "Test",x = 1});
获得您正在寻找的行为。 如果你想传递一个QueryString值,比如说一个页码,那么你会这样做: /Test/Foo/5?page=1 你的行动应该这样改变: public ActionResult Foo(int x,int? page)
{
Trace.WriteLine(x);
Trace.WriteLine(page.HasValue ? page.Value : 1);
return new EmptyResult();
}
现在测试:
希望这有助于澄清一些事情。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Umbraco CMS(.NET):加载xslt /用户控件的日志错
- asp.net-mvc – MVC 4提供的反伪造令牌是为用户“”而是当前
- asp.net-mvc – 是否可以在基于路由的MVC4中使用不同的布局
- asp.net-mvc – SQL Azure得到一个错误’已经有一个打开的D
- asp.net – 从Web应用程序打印
- asp.net-mvc – HiddenInput(DisplayValue = false)] vs [S
- asp.net-mvc – 从控制器操作返回301重定向
- 使用asp.net控件创建无序列表?
- asp.net 大文件上传控件
- nuget-package – MvcScaffolding是否通过命令行与VS 2013
- asp.net-mvc-3 – mvc3剃刀条件包装器div
- asp.net – 我应该在Web应用程序中嵌入CSS / Jav
- asp.net – Visual Studio 2010中的HTML格式
- asp.net – 如何从System.Web.HttpPostedFileBas
- asp.net – 实体框架:“底层提供商在Open上失败
- ASP.NET Core WebApi将错误消息返回给AngularJS
- asp.net-mvc – 谁设置HttpContext.User.Identit
- asp.net – 如何在gridview中将navigateurl添加到
- 拆分/模块化大型ASP.NET Web应用程序项目
- asp.net – asp:ContentPlaceHolder和代码块问题
