c# - 为 UserControl 填充模型的正确方法是什么?

标签 c# model-view-controller architecture s#arp-architecture

问题不在于 MVC,而在于代码架构。

我有一个局部 View ,需要 CompanyModel

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

<%: Html.TextAreaFor(m => m.Name) %>
<%: Html.TextAreaFor(m => m.Location) %>

公司模型

public class CompanyModel
{
     [LocalizedDisplayName("Name", NameResourceType = typeof(Resources.Views.CompanyBackground))]
     public string Name{get;set;}
     [LocalizedDisplayName("Location", NameResourceType = typeof(Resources.Views.CompanyBackground))]
     public string Location{get;set;}

     public CompanyModel()
     {
          var info = Project.GetCompanyInfo();
     }
}

Project.GetCompanyInfo()是DAL层,使用Entity Framework从DB中获取数据

我的问题:填充 CompanyModel 的“好”且正确的方法是什么? ?:

解决方案一

创建CompanyBag

public class CompanyBag
{
     public string Name{get;set;}
     public string Location{get;set;}
}

Project.GetCompanyInfo()将返回 CompanyBagCompanyModel 的 .ctor 中我将填充模型。

方案二

Project.GetCompanyInfo()将返回 CompanyModel (因此不需要辅助类)我将填写 ModelCompanyModel 的 .ctor 中

方案三

也许是您的解决方案?

更新: 我有LoadController带有 Load Action ,这个 Action 有点像工厂。它将获取 View 列表并通过反射创建它们,然后通过 Html.RenderPartial(viewName, viewModel) 加载到页面.所以,CompanyModel只是 View 的一个示例,因此我需要每个 View 都是独立的。

所以我的问题是:GetCompanyInfo 应该返回 CompanyBag 吗?或 CompanyModel我将在 .ctor 中填写模型?

谢谢

最佳答案

好的,问题更新后,这是我更新的答案:)

我假设有不同的观点 LoadController填充采用不同类型的 ViewModel , 和每个 ViewModel从域模型的不同部分填充。以下是我将如何解决这个问题:

首先,将每个部分 View 创建为 ViewUserControl<TViewModel> 的强类型子类, 所以 LoadController可以找出哪个ViewModel为它被告知要创建的每个 View 键入它需要的类型。

其次,定义一个IViewModelFactory<TViewModel>接口(interface),并为每个 ViewModel 创建一个实现输入您需要的;每个实现都知道如何创建和填充其 ViewModel从您的领域模型中输入。

最后,LoadController会找出 ViewModel 的类型它需要为每个被要求创建的 View 使用适当的 IViewModelFactory创建它。

为避免不必要的开销,LoadController可以 find all the available IViewModelFactory implementations at runtime , 并根据 ViewModel 的类型保留它们的静态存储他们创造。

总结一下:我会填充 CompanyViewModel来自Company使用 CompanyViewModelFactory , 我会填充 UserViewModel来自User使用 UserViewModelFactory等:)

关于c# - 为 UserControl 填充模型的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6214357/

相关文章:

java - Spring MVC 重定向 : new page is opened in div

java - 使用 servlet 搜索数据库

java - 架构选择

asp.net - 适用于 Azure Multi-Tenancy 应用程序的云数据库?

architecture - 有人可以解释一下消息代理的用途吗?

c# - string.Join(string, string[]) 返回 "System.String[]"

c# - MVC session 变量存储内存与磁盘缓存

c# - Visual Studio 2015 : Invalid "Cast is redundant" warning in interpolated string expression

c# - fo-DICOM:如何在DicomClient中指定本地出站端口?

php - 关于框架的一般问题