Asp.net mvc ASP.NET Web体系结构设计-第2部分

Asp.net mvc ASP.NET Web体系结构设计-第2部分,asp.net-mvc,Asp.net Mvc,事实上,我已经问过这个问题了,尽管我们回到了画板上,发现这比我们最初想象的要困难得多。我们开发了一个大型(并且非常依赖)的内部网系统,该系统在过去的几年中得到了巨大的发展 问题是它使用框架在左边有一个菜单,在顶部有一个标题,然后是主页。这样做是为了确保其他元素是静态的,同时您可以滚动页面。现在,我们已经提出了一个解决方案,使用单个页面和CSS来实现这一点,但问题在于我们的web应用程序的实际架构 我们希望转向MVC架构,以使我们的页面更加安全和易于管理,但这有一个主要问题。我们内部网系统的每个部

事实上,我已经问过这个问题了,尽管我们回到了画板上,发现这比我们最初想象的要困难得多。我们开发了一个大型(并且非常依赖)的内部网系统,该系统在过去的几年中得到了巨大的发展

问题是它使用框架在左边有一个菜单,在顶部有一个标题,然后是主页。这样做是为了确保其他元素是静态的,同时您可以滚动页面。现在,我们已经提出了一个解决方案,使用单个页面和CSS来实现这一点,但问题在于我们的web应用程序的实际架构

我们希望转向MVC架构,以使我们的页面更加安全和易于管理,但这有一个主要问题。我们内部网系统的每个部分都有与其他部分中其他页面的交叉链接。例如,假设我们有一个叫做“游戏”的部分,我们有一个叫做“玩游戏的人”的部分,但实际上这只是使用一个框架来指向一个页面,它位于我们内部网系统的另一个文件夹中,叫做“人员”,然后是“People.aspx”(一个纯粹的例子)。MVC架构将如何处理这样的事情

我们在内部网的完全不同的区域中显示的页面实际上是同一个页面。因此,有一个像这样的URL必须链接到

希望这对在MVC体系结构以及以前的体系结构(如我们正在使用的框架)方面有经验的人来说是有意义的

提出的问题将是:

  • 我们必须有重复的页面吗
  • 有没有一种方法可以使用MVC交叉引用不同部分中的页面
  • 对于一个由大约400个不同页面组成的Intranet系统,MVC是一条出路吗

干杯

Kezzer-你确定你想利用一个现有的(我想是可以工作的)系统,完全重写它,仅仅为了MVC的所谓好处吗?我知道这并不能完全回答你的问题,但我会认真考虑MVC体系结构是否真的会让你的客户比一个WebFraseStruts更开心——尤其是因为他们永远不会真正注意到。 从某种程度上讲,我们来看看Joel在这方面的文章。这并不是针对您的问题,但它确实解决了我们在研究新技术时有时会遇到的不切实际的期望。

  • 你不应该这么做,就像复杂类型背后的想法一样。您可以将“最小视图”放入一个完整的视图中,以分离重复
  • 可以使用Html.ActionLink创建指向页面的链接,也可以使用Html.RenderPartial或Html.RenderAction将整个操作呈现到页面中
  • 当然。就像我说的,你可以把重复分解成小部分,并在你需要的时候包含它们
例如

我正在为一位朋友开发一个小型店面应用程序,我发现自己正在创建一个用于添加和编辑产品的视图。问题是--我对字段使用了相同的布局。因此,我创建了一个MVC用户控件,并将其放入字段中,然后做了类似的事情

如需添加

<asp:Content ID="DefaultContent" ContentPlaceHolderID="DefaultContentPlaceHolder" runat="server">
<% Html.BeginForm<CatalogController>(c => c.AddProduct(null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.SubmitButton("Submit", "Add") %>
<% Html.EndForm(); %>
</asp:Content>

c、 AddProduct(null),FormMethod.Post);%%>
和编辑

<asp:Content ID="DefaultContent" ContentPlaceHolderID="DefaultContentPlaceHolder" runat="server">
<% Html.BeginForm<CatalogController>(c => c.EditProduct((Product)null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.Hidden("Product.ID", ViewData.Model.ID) %>
<%= Html.SubmitButton("Submit", "Save") %>
<% Html.EndForm(); %>
</asp:Content>

c、 EditProduct((Product)null),FormMethod.Post);%%>
ProductFields部分看起来是这样的

<% Product product = ViewData.Model; %>
<% IEnumerable<Category> categories = ViewData["Categories"] as IEnumerable<Category>; %>
<table>
    <tr>
        <td><%= Html.Label("Product.Name", "Name") %></td>
        <td><%= Html.TextBox("Product.Name", product.Name) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.Price", "Price") %></td>
        <td><%= Html.TextBox("Product.Price", product.Price) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.Description", "Description") %></td>
        <td><%= Html.TextBox("Product.Description", product.Description) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.IsActive", "Is active") %></td>
        <td><%= Html.CheckBox("Product.IsActive", product.IsActive) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.IsFeatured", "Is featured") %></td>
        <td><%= Html.CheckBox("Product.IsFeatured", product.IsFeatured.HasValue ? product.IsFeatured.Value : false) %></td>
    </tr>
    <tr>
        <td><%= Html.Label("Product.CategoryID", "Category") %></td>
        <td><%= Html.DropDownList("Product.CategoryID", new SelectList(categories, "ID", "Name")) %></td>
    </tr>
</table>


因此,正如您所看到的,使用ASP.NET MVC,您可以根据需要轻松地拆分页面,并将其包括在内,并非常轻松地将数据传递到页面中。

我将回答您关于MVC的第三部分问题:

MVC更容易作为一个团队工作。它在设计师/程序员串联中尤其有效,因为设计师可以处理他/她知道的东西,而程序员可以处理他/她知道的东西(面对现实,很少有she程序员),而不是在同一个空间中工作(在.aspx页面)设计器可以在.aspx视图空间中工作,而程序员可以在.cs控制器空间中工作

多次使用一个页面还有另外一个好处。使用几个不同的ActionName,并对部分页面和ViewData变量进行一点配置,您可以反复使用一个页面来覆盖几乎任何用例。我发现很难对WebForms进行类似的配置

MVC中的路由控制功能非常强大,通过智能控制器和视图设计,最终可以将400页的Intranet归结为20个左右的控制器和80页。我正在重建一个类似ESPN的内部网站,它是在WebForms上完成的,有将近200个页面,它完全适合8个控制器和50个视图。

  • 我们必须有重复的页面吗
没有

  • 有没有一种方法可以使用MVC交叉引用不同部分中的页面

  • 对于一个由大约400个不同页面组成的Intranet系统,MVC是一条出路吗

如前所述,只要您可以将这400个页面分类为具有共同点的页面组,这是可行的。根据你的分类章节听起来似乎有一个合理的页面分组。

我非常喜欢这篇文章,你的观点很好。我们面临的问题是,系统发展如此之快,以至于很难维护,特别是在使用帧的情况下。我们为每个章节提供单独的index.htm页面。然而,我完全理解你的观点。不幸的是,我对ASP.NET MVC的了解非常有限,所以理解这个例子很困难。我可以在另一个部分使用Html.ActionLink创建另一个页面,并将该页面作为pa吗