我对MVC设计模式和框架非常陌生,同时我也不是非常精通ASP.NET Forms的基础知识。然而,我了解Web开发和HTTP Post和GET的基础知识。
现在,我一直在学习一些MVC教程,我认为我已经很好地掌握了MVC模式的工作原理以及“路由引擎”的工作方式。但突然间,我看到了一段代码,它看起来像下面这样:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content("Thanks", "text/html");
}
}
我看到这里有几个问题:
- 我理解路由引擎的作用是基于URL将控制权传递给特定的ActionMethod,通常URL基本上是Controller/ActionMethod/Id类型,其中action method的参数是原始类型。在上面的示例中,如何调用“public ActionResult Index(MyViewModel model)”方法需要什么样的URL?
由于MyViewModel是一个复杂类型,你不能将它作为URL的一部分传递。那么怎么调用呢?
- 为什么第二个方法装饰有[HttpPost],而第一个方法不需要任何属性?是否有关于何时使用[HttpPost]属性和何时不使用的指导方针?
我认为我在这个拼图中缺少了一个重要的部分,两个问题都有相互关联。然而,需要一些帮助来理解它们之间的关系。
[HttpGet]
是唯一可选的,因为GET是默认的HTTP方法。任何时候,如果你想要进行POST操作,你需要使用该属性装饰该动作。 - krillgar[HttpPost]
。 - krillgar