首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助我理解MVC.NET

帮助我理解MVC.NET
EN

Stack Overflow用户
提问于 2010-09-02 14:14:19
回答 4查看 212关注 0票数 2

我习惯于使用ASP.NET表单,并且很难理解MVC.NET。

如果我在WebForms中为用户创建一个配置文件页面,它将由一个aspx页面组成,页面上添加了几个用户控件,这些控件都有不同的功能。一个控件可以显示用户的最新帖子,另一个控件可以显示与用户连接的朋友等。

但在MVC.NET中如何做到这一点呢?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-02 14:46:28

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

例如,在这种情况下,您有一个模型为Address的局部视图

局部视图

代码语言:javascript
复制
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Address>" %>

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

模型

代码语言:javascript
复制
public class Address
{
     public string AddressName {get;set;}
     public string AddressLocation {get;set;}
}

我想使用我的这个局部视图,这取决于正在使用的页面。可以是登录用户或朋友用户。我要做的就是在控制器中调用它对应的Action。

假设我把它放到了CommonController

代码语言:javascript
复制
public class CommonController : Controller
{
     ModelRepository modelRepository = new ModelRepository();

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

在这种情况下,我可以在任何页面的任何部分调用这个局部视图,方法是

代码语言:javascript
复制
<%= Html.Action("AddressPartialView", "Common", new { id = Model.AddressId })%>

假设我调用局部视图的视图有一个属性为AddressId的User模型。这样,我可以在一个单独的页面中使用和重用我的局部视图,每个页面都有不同的内容。

票数 1
EN

Stack Overflow用户

发布于 2010-09-02 14:29:52

这是一种不同的思考方式,但更符合关注点分离,一旦你开始使用它,你就永远不会想回到asp.net webforms :) (这只是我的观点)。

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

使用asp.net mvc,你可以做到以下几点。一个模型,你可以把它看作你的数据访问层。我在我的项目中尝试做的是创建一个模型,我将使用该模型与视图进行交互。

一个Controller,它指定要呈现的视图。

一个视图,应该尽可能的愚蠢,并且应该只包含表示逻辑。您还可以创建局部视图,您可以将其视为控件

让我们以Stack Overflow为例。问题可以是一个视图,你的标签和广告放在一边,可以是局部视图。模型可以有一个List和一堆CRUD (Create,Read,Update,Delete)方法。

事情就是这样。您可以阅读更多内容,更好地理解http://www.asp.net/mvc

票数 1
EN

Stack Overflow用户

发布于 2010-09-02 14:32:10

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

视图:

代码语言:javascript
复制
<%@ 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):

代码语言:javascript
复制
<%@ Control Language="C#" 
Inherits="System.Web.Mvc.ViewUserControl<MyUserControlViewModel>" %>
...

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

代码语言:javascript
复制
public class MyViewModel
{
    public MyUserControlViewModel UserControlViewModel {get; set;}
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3624238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档