【问题标题】:Possible workaround to have multiple http get methods two actions with same name?可能的解决方法是让多个 http get 方法两个具有相同名称的操作?
【发布时间】:2013-03-08 18:37:52
【问题描述】:

我正在使用 asp.net MVC 4。有没有办法在同名但参数不同的操作上使用两个 http get 方法?或者只是一种让页面成为两者的索引页面的方法,所以页面的名称是一致的?另外,int 不能为空。

例子:

用于查询字符串和搜索

   [HttpGet]
    public ActionResult Index(int num, string aString)
   {
   } 

仅用于操作链接点击(默认搜索)

 [HttpGet]
  public ActionResult Index()
 {
 } 

【问题讨论】:

  • 你为什么需要这种场景?如果它有任何用处,我想 MS 会提供某种能力来以这种方式运行它。
  • 是的,这种情况并不常见,但这是根据要求,我认为这也不是最好的,也许我可以改变团队的想法。好点。

标签: asp.net-mvc asp.net-mvc-4 http-get asp.net-mvc-controller


【解决方案1】:

没有变通办法。您可以执行以下操作:

[HttpGet]
public ActionResult Index(int num, string aString)
{
      //if num == null, throw exception or do something
      // if string == null, do something, if not, do something else
} 

【讨论】:

  • 它笑起来像黑客......这会是什么用例?在get中获取模型?
  • 如果我需要 int 不为空,但是当您单击链接时什么都没有传递。
  • @Ray:这是默认行为。所有 3 个参数都是可选的,然后您检查哪些曾经丢失并决定要做什么。
  • @Peter:是的,模型很奇怪但可能,但一般行为是有效的。查询字符串中可以有 2-3 个可选参数:'/action?num=1'、'/action?astring=name' 或 '/action?num=1&astring=name'。这是所有常见的网络用例。
  • @Ray:您可以使用重载创建私有方法并决定要调用哪个重载。
【解决方案2】:
 - (Html . BeginForm ( "ViewName", "ControllerName", FormMethod.Get ) {
   Html . Hidden ( "actionname1", "true" ) form elements set 1 submit
   button 1 }

   (Html . BeginForm ( "ViewName", "ControllerName", FormMethod.Get ) {
   Html . Hidden("actionname2", "true") form elements set 2 submit
   button 2 }

   In Controller, check for "true "values for actionname1, actionname2
   and decide on control flow for each. Assumption: Same View and Same
   Controller WITH Two distinct FormMethod.Gets

   ..Paurav

【讨论】:

    【解决方案3】:

    我实际上最终做的是在一个 get http 请求操作中传递一个具有可为空值的对象。正如上面评论中建议的@Display Name,Microsoft 已将此功能内置到 .net 框架中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2011-07-26
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2013-01-21
      • 2019-11-08
      相关资源
      最近更新 更多