Asp.net页面是否应该在MVC中有代码隐藏文件

Der*_*rin 4 asp.net-mvc

我的Web应用程序是Asp.Net MVC模式..aspx页面都没有代码隐藏文件.有人告诉我,由于应用程序遵循MVC模式,.aspx页面没有代码隐藏文件.所有C#编码都是内联完成的.

我的问题是,如果我们遵循MVC模式,我们不应该在.aspx页面的文件后面有代码.我没有看到这些.aspx页面和我们进行内联编码的传统ASP页面之间有任何区别.为了利用Asp.Net并保持代码/ html,我们不应该为每个.aspx页面都有一个代码隐藏文件?

如果有人能够清楚地解释这一点,那就太棒了.

提前致谢.

Rob*_*nik 5

Asp.net MVC不使用真实的代码隐藏.但.您不应该将您的页面视为传统的ASP页面,因为它们不是.大多数处理(如代码隐藏)都是在控制器操作中完成的.ASPX页面几乎不显示该处理的结果(当动作结果为ViewResult或时PartialViewResult).

所以我们可以说控制器动作" "许多ASPX文件的代码隐藏.

这当然是一个非常广泛的简化,但你可以这样理解它.

补充说明

您可能会争辩说在ASPX文件中编写C#代码与编写ASP代码非常相似,但让我让您想一下.每当你添加时,在Asp.net WebForms中

<asp:Repeater ... />
Run Code Online (Sandbox Code Playgroud)

你基本上做了什么,是一个foreach具有一些额外功能的不同形式的声明.在Asp.net MVC中,您编写的是一个实际的foreach语句,而不是您想要的任何其他功能.大多数时候你只是渲染没有附加功能的项目,所以foreach将是:

  1. 比丰富的服务器端控制更快
  2. 更简单,因为为每个项目呈现的HTML将是大约.与转发器项目的模板相同
  3. 资源匮乏,因为它只是一个简单的语言构造,而不是一些必须实例化,执行和保存的服务器端控件(如状态)

为什么控制器操作可以成为许多ASPX的代码隐藏?

因为我们可以拥有这种代码

public ActionResult Index()
{
    var data = /* get some data */
    if (data.Count > 0)
    {
        /* first ASPX */
        return View("DisplayItems", data);
    }
    else
    {
        /* second ASPX */
        result View("DisplayEmpty");
    }
}
Run Code Online (Sandbox Code Playgroud)

甚至没有提到这个代码的作用比一些复杂的页面生命周期处理简单得多,这些处理需要处理这两个状态,这将导致更复杂的ASPX文件具有所有HTML.

在Asp.net中,MVC代码非常简单/基本,因为它只执行它需要做的事情,并且视图也更简单,因为每个代码只能提供一个单一的状态/情境/目的.没有像Asp.net WebForms那样多面.