【发布时间】:2017-02-01 02:46:13
【问题描述】:
我们都知道 ASP.NET MVC 中的 url 总是像 example.com/controller/action?param1=value1&param2=value2
我想知道有没有办法像example.com/controller?aciton=index&param1=value1&param2=value2(notice action=index in query string) 一样将操作名称放入查询字符串中,并使 ASP.NET MVC 路由对应控制器和动作的url。查询名称的名称可以是action 或其他名称。
--- 9 月 28 日更新---
实际情况是我有一个表格,表格里面是一个表格,每列都有单选按钮,表格上方有一些按钮(创建、编辑、删除等)。这些按钮在同一个控制器中执行不同的操作。
通过搜索,我得到了一些解决方案:
- 通过 JavaScript 处理 onsubmit 并更改表单的 action 属性。 Answer link
- 在控制器中编写一个“路由”方法来重新路由请求。 Answer link(我认为这不是一个优雅的解决方案)
- 编写一个自定义属性,让 ASP.NET MVC 根据查询路由到相应的操作。 This anwser 和 this answer (非常接近我最初的想法,我目前正在使用这个解决方案)
【问题讨论】:
-
我建议尝试一下路由配置。如果它不能直接通过路由实现,那么您可以将其路由到一个“处理程序”操作,该操作评估
action参数并重定向到指定的操作。这应该足够简单 -
一般路由配置中的路由不能配置查询字符串。如果您尝试这样做,它将引发错误。我不确定是否有办法推翻路由的主要约定。您是否有理由要这样做,它使 MVC 的约定变得多余。
-
您不需要在路由配置中配置查询字符串,MVC 还会检查查询字符串并将其映射到您的操作参数,假设您具有与查询字符串名称匹配的参数名称
标签: asp.net asp.net-mvc asp.net-mvc-5