ASP.NET MVC 1路由参数问题

时间:2011-05-03 04:19:55

标签: asp.net-mvc

我需要一个在查询字符串中传递附加参数的URL。

即。默认情况下,“{controller} .mvc / {action} / {id}”适用于大多数情况,但我需要为几页添加额外的查询字符串参数。

我是否向Global.asax.cs添加了一些内容以满足此需求?

我担心的是列表页面会是这样的 Forms.mvc /测量

和细节页面会是这样的 Forms.mvc /测量/ 1

但对于这两个页面,我需要添加额外的查询字符串参数(TypeId)。

我知道我可以去上学并做“?TypeId = ...”但这在MVC世界中似乎是错误的。我正在使用MVC 1。

所以我的问题是 - 如何使用路由添加额外的查询字符串参数,以及如何在添加新参数后不将列表屏幕与详细信息屏幕混淆。

是否像以下一样简单:

routes.MapDomains("{controller}.mvc/{action}/{typeid}/{id}", "DomainX", new[] { "Forms" });

问题可能是并非所有表单域页都可以使用此类型。

或者我应该在MapDomains之前添加routes.MapRoute以捕获使用此typeid的两个“部分”?

对不起,如果这是一个非常基本的问题 - 对MVC来说还是新手! :)

谢谢!

2 个答案:

答案 0 :(得分:1)

没有错,如果你以经典的方式添加查询字符串参数,它会工作但是它不会RESTFul并且你不能“生成”动作链接...因为路由约束可以像ScottGu一样使用关于URL路由的博客: http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx Link can be generated from URL constraints

您可以访问此博客,了解Create Custom Route Constraints

答案 1 :(得分:0)

您无需对路由执行任何操作,以便利用查询字符串将数据传递到控制器。您需要做的就是确保将查询字符串名称指定为路由匹配的控制器方法中的变量。

因此,如果您的网址为

"Forms.mvc/Survey/1?TypeId=1"

您可以将路径与查询字符串匹配为:

public ActionResult Survey(int? id, int TypeId) {...}