【发布时间】:2011-01-22 07:35:21
【问题描述】:
在我继续使用 ASP.NET MVC 的过程中,我现在需要为实体呈现编辑/创建表单。
我的实体由枚举和一些其他模型组成,通过 LINQtoSQL 在存储库中创建。
我现在正在努力寻找一种体面的方式来呈现编辑/创建表单,该表单将包含一些下拉列表和一些文本字段。我意识到这可能不是最用户友好的方法,但这是我现在要做的:)。
我有一个存储库层和一个业务层。控制器与服务层接口。
最好像这样简单地创建一个视图模型吗?
public class EventFormViewModel
{
IEventService _eventService;
public IEvent Event { get; private set; }
public IEnumerable<EventCampaign> Campaigns { get; private set; }
public IEnumerable<SelectListItem> Statuses { get; private set; }
// Other tables/dropdowns go here
// Constructor
public EventFormViewModel(IEventService eventService, IEvent ev)
{
_eventService = eventService;
Event = ev;
// Initialize Collections
Campaigns = eventService.getCampaigns().ToSelectList(); //extn method maybe?
Statuses = eventService.getStatus().ToSelectList(); /extn for each table type?
}
所以这会给我一个新的 EventFormViewModel 我将绑定到一个视图。但这是最好的方法吗?我基本上是从数据库中提取几个不同表的所有数据并将它们转换为 IEnumerable。这似乎效率不高,但我想我可以缓存下拉列表的内容。
另外,如果我只有获取下拉菜单数据的方法,我应该跳过服务层直接进入存储库吗?
我的问题的最后一部分:对于 ToSelectList() 扩展方法,是否可以为每个表编写一个方法并通用使用它,即使某些表具有不同的列(“Id”和“Name”与“ Id”和“CampaignName”)。
如果这太笼统了,请原谅我,我只是想避免走上一条死胡同——或者一条会有很多坑洼的路。
【问题讨论】:
标签: c# asp.net-mvc data-binding extension-methods viewmodel