如何区分无参数和字符串参数mvc动作方法?

时间:2011-05-22 11:48:50

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

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

我的注册:

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

这两种方法与使用的http方法和参数都不同。

  [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()方法。即使没有提供title参数(通常是通过querystring / Test / Test /?title = test)。可能是因为string是引用类型,可以为null。

但是如何克服这个问题呢?如何在这些方法之间做出改变?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

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