2010-09-02 76 views
1

我习惯于使用ASP.NET FORMS,而且我很难理解MVC.NET。帮我理解MVC.NET

如果我在WebForms中为用户创建一个配置文件页面,它将包含一个aspx页面,并在页面上添加了多个usercontrols,这些页面都做了不同的操作。 一个控件可能会显示用户的最新帖子,另一个连接到用户的朋友等。

但是,如何在MVC.NET中完成此操作?

我应该为每个用户控件创建几个视图,还是我应该创建一个包含页面上需要的所有数据然后将其馈送到视图的巨大模型?

+0

我非常乐意推荐上http://www.asp.net/mvc的ASP.NET MVC教程 - 他们是超级快,在教学理念。但是在你的特定情况下要记住的关键是,用MVC,用户不会与页面交互 - 用户与控制器上的操作方法进行交互。页面只是行为的可能结果。 – bzlm 2010-09-02 06:28:17

+0

我一直在看vidoes(并非所有人都认为),但我想我有点'头脑冷静',一直没有找到一个例子或讨论如何做到这一点。 – Dofs 2010-09-02 06:32:49

回答

1

对于我来说,如果一个局部视图(在asp.net窗体中的.ascx或usercontrol)上有很多动态内容,我会使它成为一个强类型视图。这意味着它有自己的模型。取决于其可用性。但我强烈建议让每个视图的相应模型。

例如,在这种情况下,你必须拥有的Address

局部视图模型

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Address>" %> 

Address Name: <%=Model.AddressName %> 
Address Location: <%=Model.AddressLocation %> 

型号

public class Address 
{ 
    public string AddressName {get;set;} 
    public string AddressLocation {get;set;} 
} 

的局部视图我想用这部分我的视图取决于正在使用的页面。可以是登录用户或朋友用户。我会做的只是在控制器中调用其对应的操作。

说我把它放在CommonController

public class CommonController : Controller 
{ 
    ModelRepository modelRepository = new ModelRepository(); 

    public PartialViewResult AddressPartialView(int id) 
    { 
      var address = modelRepository.GetAddress(id); 
      return View("AddressPartialView", address); 
    } 
} 

在这种情况下,我可以通过

<%= Html.Action("AddressPartialView", "Common", new { id = Model.AddressId })%> 

调用任何页面的任何部分,这部分海景假设我认为我打电话偏View有一个用户模型,属性为AddressId。这样,我可以在1个单独页面中使用和重用我的部分视图,每个页面都有不同的内容。

1

这是一种不同的思维方式,但更多地与分离关注点相一致,一旦你开始使用它,你永远不会想回到asp.net webforms :)(只是我的看法)。

让我们看看您的示例 1 Webform(aspx)页面将包含一组用户控件,您可以将逻辑放在代码背后,无论是在用户控件还是在任何地方。

随着asp.net mvc你有以下。 模型,您可以将其视为数据访问层。我在我的项目中尝试做的是创建一个模型,我将用它与View进行交互。

控制器,其委托要呈现哪个视图。

a View,应该尽可能愚蠢,应该只包含表示逻辑。 您也可以创建部分视图,您可以将其视为您的控件

让我们以Stack Overflow为例。 问题可以是视图和您的标签和广告在侧面,可以是部分视图。 该模型可以有一个列表和一堆CRUD(创建,读取,更新,删除)方法。

就是这样。您可以阅读更多内容并从http://www.asp.net/mvc更好地了解

0

在ASP.NET MVC中,仍可以创建用户控件(这些也称为部分视图)。与WebForm方法的不同之处在于这些用户控件从其父视图获取数据。例如:

视图:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<MyViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
    ... 
    <% Html.RenderPartial("MyUserControl", Model.UserControlViewModel); %> 
    ... 
</asp:Content> 

用户控制(这一个应该命名为MyUserControl.ascx):

<%@ Control Language="C#" 
Inherits="System.Web.Mvc.ViewUserControl<MyUserControlViewModel>" %> 
... 

MyViewModel包含所有数据两者的视图及其用户控制:

public class MyViewModel 
{ 
    public MyUserControlViewModel UserControlViewModel {get; set;} 
} 

我发现教程Scott Gu's blog是一个很好的起点。

0

在Microsoft平台上选择新的或企业Web开发的展示模式是一项艰巨的任务,我认为只有三种;查看模型,模型 - 视图 - 演示者(MVP)或ASP.NET MVC(Model2派生)。

因此本文将帮助您了解选择何时ASP.NET MVC Patterns