我习惯于使用ASP.NET表单,并且很难理解MVC.NET。
如果我在WebForms中为用户创建一个配置文件页面,它将由一个aspx页面组成,页面上添加了几个用户控件,这些控件都有不同的功能。一个控件可以显示用户的最新帖子,另一个控件可以显示与用户连接的朋友等。
但在MVC.NET中如何做到这一点呢?
我是应该为每个用户控件创建多个视图,还是应该创建一个巨大的模型,其中包含页面上需要的所有数据,然后将其提供给视图?
发布于 2010-09-02 14:46:28
对我来说,如果分部视图( 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;}
}我想使用我的这个局部视图,这取决于正在使用的页面。可以是登录用户或朋友用户。我要做的就是在控制器中调用它对应的Action。
假设我把它放到了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 })%>假设我调用局部视图的视图有一个属性为AddressId的User模型。这样,我可以在一个单独的页面中使用和重用我的局部视图,每个页面都有不同的内容。
发布于 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
发布于 2010-09-02 14:32:10
在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上的教程是一个很好的起点。
https://stackoverflow.com/questions/3624238
复制相似问题