【问题标题】:How to differ between a parameterless and a string-parameter mvc action method?如何区分无参数和字符串参数 mvc 操作方法?
【发布时间】:2011-05-22 11:48:49
【问题描述】:

今天我发现很难发现两种 MVC 操作方法之间的区别。

我的区域注册:

  public override void RegisterArea(AreaRegistrationContext context)
  {
     // My test route.
     context.MapRoute(
         "testRoute",
         "Test/{action}",
         new { controller = "Test", action = "Index" }
     );
  }

还有这两种方法,分别不同于使用的http-method和参数。

  [HttpPost]
  public ActionResult Test(TestModel model)
  {
     return View("Confirm", model);
  }

  [HttpGet]
  public ActionResult Test(string title)
  {
     Response.Write(title);
     Response.End();

     return null;
  }

不管 http 方法,它总是会渲染第二个 Test() 方法。即使没有提供标题参数(通常由查询字符串 /Test/Test/?title=test 提供)。可能是因为string是引用类型,可以为null。

但是如何克服这个问题呢?如何区分这些方法?

提前致谢。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 routing


    【解决方案1】:

    我遵循这个签名,基本上总是使用带有模型的'GET'方法签名作为最后一个参数。

    [HttpPost]
    public ActionResult Test(string title, TestModel model)
    

    顺便说一句,我从未见过你提到的行为。所以我怀疑这是否是 MVC 问题,而不是您的配置中的问题。 [HttpGet] 方法永远不会在 POST 方法上触发。该方法是否真的发布(检查您的 ControllerContext 的 Request 属性)。

    【讨论】:

    • 好吧,你是对的。谢谢!!没有通过正确的测试!这些 http 属性确实可以完成工作。但是想象一下不能使用http属性,那这两种方式真的是没法区分的吧?
    • 正确。如果您想通过调用Test(null); 来调用该方法(例如在单元测试中),您可以看到它。您必须明确地装箱,否则编译器将失败。所以像Test((string)null);.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多