今天我发现很难发现两种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。
但是如何克服这个问题呢?如何在这些方法之间做出改变?提前致谢。
答案 0 :(得分:1)
我遵循这个签名,基本上总是使用'GET'方法签名,模型作为最后一个参数。
[HttpPost]
public ActionResult Test(string title, TestModel model)
顺便说一句,我从未见过你提到过的行为。所以我怀疑这是否是MVC问题而不是你配置中的问题。 [HttpGet]方法永远不会在POST方法上触发。方法是否真的发布(检查ControllerContext的Request属性)。