我的问题是,如果我们遵循MVC模式,难道就不应该为.aspx页面拥有代码后置文件吗?我没有看到这些.aspx页面和传统的ASP页面之间有任何区别,在利用Asp.Net并维护代码/ HTML方面,我们难道不应该为每个.aspx页面拥有一个代码后置文件吗?
如果有人能清楚地解释一下,那就太好了。
提前致谢。
Asp.net MVC不使用代码后置,这是正确的。但是。你不应该把你的页面看成传统的ASP页面,因为它们并不是。大部分处理(如在codebehind中实现)都是在控制器操作内完成的。ASPX页面仅在操作结果为ViewResult
或PartialViewResult
时显示处理结果。
因此,我们可以说控制器操作“是”许多ASPX文件的代码后置。
当然,这只是一个非常宽泛的简化,但你可以这样理解。
你可能会认为在ASPX文件中编写C#代码与编写ASP代码非常相似,但请让我让你思考一下。在Asp.net WebForms中,每当你添加了
<asp:Repeater ... />
foreach
语句,并具有一些附加功能。在Asp.net MVC中,您编写的是一个实际的foreach
语句,而没有任何其他功能。大多数情况下,您只需呈现项目而没有其他功能,因此foreach
将是:
因为我们可以有这样的代码
public ActionResult Index()
{
var data = /* get some data */
if (data.Count > 0)
{
/* first ASPX */
return View("DisplayItems", data);
}
else
{
/* second ASPX */
result View("DisplayEmpty");
}
}
更不用说这段代码所做的事情比一些需要处理两种状态的复杂页面生命周期处理要简单得多,这将导致所有HTML都在更加复杂的ASPX文件中。
在Asp.net MVC中,代码非常简单/基础,因为它只做需要做的事情,视图也同样简单,因为每个视图可能只服务于一个单独的状态/情况/目的。没有像Asp.net WebForms那样多方面的功能。
所有的.aspx页面都没有代码后台文件
这就是应该的。在WebForms中,传统的代码后台需要订阅页面生命周期的不同事件,但在MVC中,这个任务由控制器完成。你的.aspx页面当然可以包含一些内联服务器端代码,以便使用HTML和Url助手,例如TextBoxFor、EditorFor、ActionLink等。但这就是你应该限制视图的范围。
以Razor为例,它甚至不存在代码后台的概念。因此,即使在WebForms视图引擎中仍然可以有代码后台,这是因为它是经典ASP.NET WebForms的遗留产物,不能在MVC中使用。
MVC 中没有代码后台。MVC 只是将 aspx 作为模板引擎使用(可能是为了快速发布版本,因为他们现在正在转向 Razor 作为首选的模板引擎)。
视图文件不应该有代码后台文件(无论是WebForms ViewEngine还是Razor ViewEngine)。MVC的本质是您不应该在视图中有任何逻辑,它们应该在大部分情况下都是愚蠢的。最多可以使用循环(许多人使用编辑器模板来避免循环)和条件语句有条件地呈现HTML。因此,当您的视图中没有逻辑时,根本不需要代码后台。当控制视图时,模型中的每个内容都应该被设置。如果您认为有视图特定的逻辑