【问题标题】:ASP.NET MVC 1 Route parameter questionASP.NET MVC 1 路由参数问题
【发布时间】:2011-05-03 04:19:55
【问题描述】:

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

即。默认的“{controller}.mvc/{action}/{id}”在大多数情况下都有效,但我需要为几个页面添加一个额外的查询字符串参数。

我是否要在 Global.asax.cs 中添加一些东西来满足这个要求?

我担心列表页面会类似于 Forms.mvc/调查

详细信息页面类似于 Forms.mvc/Survey/1

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

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

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

是不是就这么简单:

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

问题可能是不是所有的 Forms 域页面都可以使用这个 typeid..

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

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

谢谢!!

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    没错,如果您以经典方式添加查询字符串参数,它将起作用,但它不会是 RESTFul 并且您将无法“生成”操作链接......因为路由约束可以作为 ScottGu 博客的两种方式使用网址路由: http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

    你可以访问这个关于Create Custom Route Constraints的博客

    【讨论】:

    • 谢谢 - 不幸的是,约束对我没有帮助,因为这两个参数都是整数,但很高兴知道。这在 mvc 1 中有效吗?不幸的是,scottgu 链接也给出了 404。希望我可以使用带有自定义路线约束文章中的两个参数的地图路线。
    • 当然你可以在路由中放两个 int(s) 我能理解为什么不......你可以一个可选参数......关于链接,我修改了它们并且它们正在工作
    【解决方案2】:

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

    所以如果你有一个

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

    您可以将路由与查询字符串匹配,如下所示:

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

    【讨论】:

    • 谢谢我的意思是说我知道我可以用 querystring 参数去老学校,但不认为它在 MVC 和漂亮的 url 世界中是理想的:)
    猜你喜欢
    • 2023-03-14
    • 2023-01-25
    • 2013-11-13
    • 2011-11-30
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多