鉴于以下代码(高度简化以直截了当),必须遵循模式是否是一种代码味道?
型号:
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Category Cat { get; set; }
}
class Category
{
public int Id { get; set; }
public string Label { get; set; }
}
编辑产品的视图:
<% =Html.EditorFor( x => x.Name ) %>
<% =Html.EditorFor( x => x.Category ) %>
类别的 EditorTemplate
<% =Html.DropDownList<Category>() %>
HtmlHelper 方法
public static MvcHtmlString DropDownList<TEntity>(this HtmlHelper helper)
where TEntity : Entity
{
var selectList = new SelectList(
ServiceLocator.GetInstance<SomethingGivingMe<TEntity>>().GetAll(),
"Id", "Label");
return SelectExtensions.DropDownList(helper, "List", selectList, null, null);
}
作为参考,helper 方法的真正实现需要一些 lambdas 来获取 DataTextField 和 DataValueField 名称、所选值等。
困扰我的一点是在 HtmlHelper 中使用服务定位器。我认为我的 Product 模型中应该有一个 AllCategories 属性,但是每次需要时都需要在控制器中填充它。
所以我认为我使用的解决方案更简单,因为辅助方法是通用的(modelbinder 也是通用的,这里不包括在内)。所以我只需要为需要 DropDownList 的每种类型创建一个 EditorTemplate。
有什么建议吗?