0

实际上,我编写的每个 ASP 应用程序(数百个)都遵循完全相同的模式。一个带有页眉和页脚的“单页应用程序”,以及一个动态更新的内容区域,该区域会根据 url 中发生的内容而变化。类似于以下内容(非常简化,但演示了原理):

[% select case lcase(request("action") %]
[% case "home" %]
    [div class='class_home'...]
        Home Screen HTML/Script/ASP
    [/div]
[% case "enroll" %]
    [div class='class_enroll'...]
        Enroll Screen HTML/Script/ASP
    [/div]
[% case "checkout" %]
    [div class='class_checkout'...]
        [!-- if it's gonna be lengthy, will often do this instead: --]
        [!-- 
            #include file=CHECKOUT.inc.asp 
        --]
    [/div]
[% end select %]

这种模式甚至可以嵌套几层深,并涉及额外的请求(“子操作”)子区域/子表单。每个表单都提交给自己([form action="" method=POST]),顶部的 asp 脚本捕获表单并处理它,然后继续。

那么,问题是,这种模式是否仍然在 MVC 内部完成?还是我必须在我创建的每个单独页面中一遍又一遍地复制公共区域?

想要这样做甚至是个好主意吗?还是有更好的方法来实现“单页应用程序”的相同目标?

谢谢!

编辑:这是一个例子。它已经过时了几年,但它展示了我正在谈论的设计模式。我可以在 MVC 中做这么复杂的事情吗?

http://www.pdqauction.com

如果您想登录,请使用拍卖代码“wallace”和“guest”作为名称和密码。您可以看到我在切换到 MVC 时所面临的情况。这些并不简单,webapps。有时它会变得相当复杂。我需要知道我是否能够像 ASP 一样轻松地在 MVC 中做到这一点。

4

3 回答 3

1

即使在经典的 ASP 中,您也可以实现这一点,而不会出现该 select 语句中发生的所有疯狂情况。

在 MVC 中,您使用局部和布局页面来避免重复代码。这是一个很好的概要http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

于 2013-07-17T20:04:39.117 回答
0

这在 MVC 中仍然相同。如果您使用的是 Razor,请_Layout.cshtml/Views/Shared. 如果您使用的是旧的 ASP.Net 引擎,它将位于同一位置,但称为MasterPage.

此外,还有一个名为_ViewStart.cshtml. 这是由框架自动调用的,这就是指向_Layout.cshtml文件的内容。

于 2013-07-17T20:01:38.930 回答
0

_ViewStart.cshtml我将在使用and的建议中添加更多内容_Layout.cshtml。确保对所有视图使用强类型视图,并让每个视图模型从具有所有“通用”数据(如菜单状态、登录状态等)的基本视图模型类扩展。

您只需使用惯性来执行此操作:

public class MyBaseViewModel
{
     public string UserName { get; set; }
     //other properties
}

public class MySampleViewModel : MyBaseViewModel
{
     //additional properties for this View only
}
于 2013-07-17T20:19:38.533 回答