我很难在.NET中掌握MVC的概念。我正在创建一个基本的博客应用程序,主要是为了获得MVC的洞察力和技能。我只是没有得到一些。我目前还不清楚的部分是Controller和View之间的关系。如果有人能回答我的话,那就明白了这件事。
我有一个名为TestA的View,它对应于我的Controller ControllerTestA。现在我在ControllerTestA中添加了以下内容。
public ActionResult TestA (){ //do something }
现在我需要知道来自ViewA的任何形式的所有回发是否都必须通过我的TestA Controller方法。基本上我可以根据不同的原因使用不同的参数进行不同的回发。一些用于一个回发,另一些用于另一个。这是怎么做的?
在这里会有一些帮助。
答案 0 :(得分:4)
你错过了这里关系的一个关键部分,即路由。您使用 Postback 等术语来表达WebForms;不这样做是因为你最终会让自己感到困惑。
考虑MVC的最佳方式是请求和响应。
让我们看看如何在MVC应用程序中发生请求(高级别)。
整个过程由路径决定,控制器和视图之间的关系是微不足道的。发布到表单的位置由您在视图中通过使用帮助程序方法确定,这些方法可确定在下一个请求/响应流程中点击的路径。
一些助手方法。
@Url.Action("index", "home");
@Html.ActionLink("index", "home")
@using (Html.BeginForm("create", "home")) { }
总结一下,控制器动作和视图之间的关系确实很方便你的路线。一旦掌握了如何创建它们,您就会更好地理解如何管理应用程序的交互。希望有所帮助。 :)
答案 1 :(得分:2)
MVC中没有“Postback”这样的东西。与WebForms相比,视图仅呈现将HTML发送到浏览器。一旦浏览器发出任何类型的请求,它就会转到控制器,而不是视图。
至于关系:
TestAController
(注意:不是“ControllerTestA”),它会提供“/ TestA / *”网址。如果你有一个方法TestA
,它将提供“/ TestA / TestA”。View(someModel)
,它将在文件夹TestA.cshtml
中查找名为TestA.aspx
/ Views\TestA
的视图,其名称与您的方法类似(命名为您的控制器,没有“控制器”后缀)someModel
呈现HTML。对于参数或重载,有一些限制:
示例:
public ActionResult TestA(
string someOptionalParameter, int? someOtherOptionalParam)
{
if (string.IsNullOrEmpty(someOptionalParameter)) { ... }
if (someOtherOptionalParam == null) { ... }
}
如果未将参数发布到服务器,模型映射器会将参数设置为null
。
就像Khalid已经提到的那样 - 你不应该混淆MVC和WebForms的概念。他们是非常不同的。 MVC没有可以发布到服务器的“视图状态”。它没有类似WebForm的ASPX(或CSHTML)页面生命周期。
答案 2 :(得分:1)
如果您在视图中有表单,那么该表单会有一个要发布到的网址。此URL位于视图中的Html.BeginForm方法中。
然后,表格将发布到审批控制器中的相应控制器方法
所以如果BeginForm像这样开始:
使用(Html.BeginForm(“AddProduct”,“Product”
然后将调用控制器Product(ProductController是类名)中的action方法“AddProduct”。