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

Asp.net mvc Asp.net页面是否应该在MVC中具有代码隐藏文件,asp.net-mvc,Asp.net Mvc,我的web应用程序是Asp.NETMVC模式。所有.aspx页面都没有代码隐藏文件。我被告知,由于应用程序遵循MVC模式,.aspx页面没有代码隐藏文件。所有的C#编码都是内联完成的 我的问题是,如果我们遵循MVC模式,我们不应该为.aspx页面设置代码隐藏文件。我看不出这些.aspx页面和传统的ASP页面有什么区别,在传统的ASP页面中,我们进行内联编码。为了利用Asp.Net并维护代码/html,我们不应该为每个.aspx页面都设置一个代码隐藏文件吗 如果有人能清楚地解释这一点,那就太好了

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

我的问题是,如果我们遵循MVC模式,我们不应该为.aspx页面设置代码隐藏文件。我看不出这些.aspx页面和传统的ASP页面有什么区别,在传统的ASP页面中,我们进行内联编码。为了利用Asp.Net并维护代码/html,我们不应该为每个.aspx页面都设置一个代码隐藏文件吗

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


提前感谢。

Asp.net MVC不使用代码隐藏,这是真的。但是。你不应该把你的页面看作是传统的ASP页面,因为它们不是。大部分处理(如codebehind)在控制器动作中完成。ASPX页面几乎不显示该处理的结果(当操作结果为
ViewResult
PartialViewResult
时)

因此,我们可以说控制器操作“是”许多ASPX文件的代码滞后。

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

补充说明 您可能会说,在ASPX文件中编写C#代码与编写ASP代码非常相似,但让我让您想一想。在Asp.net WebForms中,无论何时添加

<asp:Repeater ... />
更不用说,这段代码所做的事情比一些复杂的页面生命周期处理要简单得多,而这些复杂的页面生命周期处理需要处理这两种状态,这将导致更复杂的ASPX文件包含所有HTML


在Asp.net中,MVC代码非常简单/基本,因为它只做它需要做的事情,视图也非常简单,因为每个视图可能只服务于一个状态/情况/目的。没有Asp.net WebForms中的多方面功能。

MVC中没有代码落后。MVC只是将aspx用作模板引擎(可能是为了快速发布,因为他们现在正转向Razor作为他们首选的模板引擎)

所有.aspx页面都没有代码隐藏文件

应该是这样的。WebForms中的传统代码(订阅页面生命周期中的不同事件)不应再在MVC中完成。此任务由控制器完成。您的.aspx页面当然可以包含一些内联服务器端代码,以便使用HTML和Url帮助程序,如TextBoxFor、EditorFor、ActionLink等。。。但这就是你应该限制你的观点的地方


让我们以另一个视图引擎(如Razor)为例。甚至不存在代码隐藏的概念。因此,您仍然可以在WebForms视图引擎中使用代码隐藏,这是因为它是经典ASP.NET WebForms的遗留遗产,不会在MVC中使用。

任何视图都不应该有代码隐藏文件(无论是WebForms viewengine还是razor viewengine)。mvc的本质是,视图中不应该有任何逻辑,它们在大多数情况下都应该是哑的。最多可以使用循环(许多人使用编辑器模板来避免循环)和条件语句有条件地呈现HTML。因此,当视图中没有逻辑时,根本不需要代码隐藏。当控制视图时,应设置模型中的所有内容。如果您认为存在特定于视图的逻辑

,那么如何在.aspx页面中维护html和代码呢。我的项目经常使用UI以及添加/修改新功能。由于Html和内联代码都被捆绑在一起,所以进行修改是很困难的。在这种情况下,我们应该使用MVC吗?@Derin:你是说你的Asp.net WebForms应用程序由ASPX文件组成,这些文件也封装了大部分C#代码?如果是这种情况,则控制器操作不能作为视图文件的一部分。控制器是独立的类。我从未尝试在视图中定义它们,但我想它不应该起作用,因为视图通常没有预编译,因此控制器类不可用。如何在.aspx页面中维护html和代码。我的项目经常使用UI以及添加/修改新功能。由于Html和内联代码都被捆绑在一起,所以进行修改是很困难的。在这种情况下,我们应该选择MVC吗?@Derin,我不明白这有什么问题。如果你不喜欢WebForms的标签汤,你可以选择Razor视图引擎,它更干净,更容易理解语法。
public ActionResult Index()
{
    var data = /* get some data */
    if (data.Count > 0)
    {
        /* first ASPX */
        return View("DisplayItems", data);
    }
    else
    {
        /* second ASPX */
        result View("DisplayEmpty");
    }
}