asp.net-mvc – ASP.NET MVC QueryString默认覆盖提供的值?
发布时间:2020-12-15 18:49:50 所属栏目:asp.Net 来源:网络整理
导读:使用ASP.NET MVC Preview 5(虽然这也尝试了beta),似乎querystring默认在路由重写在查询字符串传递的值。重写是这样写一个控制器: public class TestController : Controller{ public ActionResult Foo(int x) { Trace.WriteLine(x); Trace.WriteLine(this.
使用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:如何允许访问内部网用户的页面,拒绝外网用户?
- ASP.NET MVC.检查用户是否已获得JavaScript授权
- asp.net – 程序或函数期望未提供的参数
- asp.net-mvc – ASP.NET MVC2的性能监控?
- asp.net – 正则表达式匹配10-14位数
- asp.net – WSDL.exe工具的/ serverInterface和/ server选项
- asp.net-mvc – mvc编辑器模板结果被缓存
- asp.net C#ajax运行’async’批处理作业
- 使用ASP.net和Access数据库保护SQL Injection的网站
- ASP.NET UpdatePanel和Javascript __dopostback
推荐文章
站长推荐
- 代码重构之法——方法重构分析
- asp.net-mvc – 在MVC 3中写入只读会话
- asp.net-mvc – asp.net mvc 3中的参考脚本库是什
- asp.net – 在ViewState或Session State中存储Da
- Asp.net中UpdatePanel内FileUpload的正确使用方法
- asp.net-mvc – 主机名中没有尾部斜杠,HttpRespo
- 对于ASP.Net中的IIS管理哪个更好:WMI或ADSI或托
- asp.net-mvc – 优化性能或属性路由和路由表
- asp.net – 多个域的集成Windows身份验证
- asp.net-mvc-4 – 如何在AngularJS局部视图中使用
热点阅读