我习惯使用ASP.NET FORMS,我很难理解MVC.NET。
如果我在WebForms中为用户创建一个配置文件页面,它将包含一个在页面上添加了几个用户控件的aspx页面,这些页面都做了不同的事情。 一个控件可能显示用户的最新帖子,另一个控件可能显示连接到用户的朋友等。
但是如何在MVC.NET中完成?
我是否应该为每个用户控件创建多个视图,或者我应该创建一个包含页面上所需的所有数据然后将其提供给视图的大型模型?
答案 0 :(得分:1)
这是一种不同的思维方式,但更加符合关注点的分离,一旦你开始使用它,你就永远不想回到asp.net webforms :)(仅限我的观点)。
让我们举个例子吧 1 Webform(aspx)页面将包含一组用户控件,您可以在后面的代码中使用逻辑,无论是在用户控件中还是在任何位置。
使用asp.net mvc,您有以下内容。 模型,您可以将其视为数据访问层。我在我的项目中尝试做的是创建一个模型,我将用它来与View进行交互。
一个Controller,它委托要呈现的视图。
一个视图,应该尽可能地愚蠢,并且应该只包含表示逻辑。 您还可以创建部分视图,您可以将其视为控件
我们以Stack Overflow为例。 问题可以是视图,您的标签和广告在侧面,可以是部分视图。 模型可以有一个List和一堆CRUD(创建,读取,更新,删除)方法。
就是这样。您可以阅读更多内容,并从http://www.asp.net/mvc
中获得更好的理解答案 1 :(得分: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 })%>
假设我的视图我正在调用部分视图,其用户模型的属性为AddressId
。通过这种方式,我可以在一个页面中使用和重用我的部分视图,每个页面都有不同的内容。
答案 2 :(得分: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上的教程是一个很好的起点。
答案 3 :(得分:0)
在Microsoft平台上为新的或企业Web开发选择演示模式是一项艰巨的任务,在我看来只有三个; View Model,Model-View-Presenter(MVP)或ASP.NET MVC(Model2衍生物)。
因此,文章将帮助您了解选择何时ASP.NET MVC Patterns