问题不在于 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()
将返回 CompanyBag
在 CompanyModel
的 .ctor 中我将填充模型。
方案二
Project.GetCompanyInfo()
将返回 CompanyModel
(因此不需要辅助类)我将填写 Model
在 CompanyModel
的 .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/