我很难掌握.NET中的MVC概念。我正在创建一个基本的Blog应用程序,主要是为了获得有关MVC的见识和技能。我只是不太了解。我目前不清楚的部分是Controller和View之间的关系。如果有人回答我,这将解决问题。

我有一个名为TestA的视图,它对应于我的控制器ControllerTestA。现在,我在ControllerTestA中添加了以下内容。

public ActionResult TestA (){ //do something }

现在,我需要知道我从TestA的视图以任何形式进行的所有回发是否都必须通过我的TestA Controller方法。因此,本质上,由于不同的原因,我可以使用不同的参数进行不同的回发。一些与一个回发一起使用,而另一些则与另一个回发一起使用。那是怎么做的?

希望在这里有所帮助。

最佳答案

MVC中没有“回发”之类的东西。与WebForms相比,视图仅呈现要发送到浏览器的HTML。浏览器发出任何类型的请求后,它都会直接发送给控制器,而不是视图。

至于关系:

  • 如果定义了TestAController(注意:不是“ControllerTestA”),它将使用“/ TestA / *” URL。如果其中有TestA方法,它将用作“/ TestA / TestA”。
  • 如果您的方法返回View(someModel),它将在TestA.cshtml文件夹(名称与您的控制器类似,但不带“Controller”后缀)中查找一个名为TestA.aspx / Views\TestA的视图,该视图的名称类似于您的方法。
  • 该视图将基于控制器传递的someModel呈现HTML。
  • 在视图中,您可以调用其他URL或将数据发布到某些URL。这关闭了圆圈。

  • 至于参数或重载,有一些限制:
  • 您可以为GET,POST,PUT,DELETE定义重载。但是,您将需要使用相应的属性注释方法。
  • 但是,对于具有不同参数集的POST,您无法定义相同方法名称的多个重载。您将需要进行POST方法签名,以便可以或不能将参数发送到服务器:

  • 例:
    public ActionResult TestA(
        string someOptionalParameter, int? someOtherOptionalParam)
    {
        if (string.IsNullOrEmpty(someOptionalParameter)) { ... }
        if (someOtherOptionalParam == null) { ... }
    }
    

    如果未将参数发布到服务器,则模型映射器会将您的参数设置为null

    就像已经提到的Khalid一样-您不应混淆MVC和WebForms的概念。他们有很大的不同。 MVC没有可以发布到服务器的“视图状态”之类的东西。对于ASPX(或CSHTML)页面,它没有类似WebForm的生命周期。

    10-02 05:52