包含从Controller填充的DropDownList的单个View的多个ActionResults

时间:2012-11-06 13:59:43

标签: asp.net-mvc

我有2个ActionResults,它们使用DropDownList源返回相同的视图

Public ActionResult Create()
{
    var model = new ViewModel {
        Entity = new Entity(),
        Categories = GetCategories()
    };

    return View("Edit", model);
}

Public ActionResult Edit(int id)
{
    var model = new ViewModel {
        Entity = GetFromDatabase(id),
        Categories = GetCategories()
    };

    return View(model);
}

我觉得我打破了DRY原则,即使我已经将类别的数量移到某个方法中。有没有更好的方法来解决这个问题,只说明从哪里获取类别?

1 个答案:

答案 0 :(得分:0)

我觉得你有些担心。这段代码对我来说很好。这更具可读性。只要您没有很大的性能问题,就不必担心这一点。

如果您仍想在两个地方避免GetCategories调用,可以将其放入ViewModel类的构造函数中。

public class ViewModel
{
  public ViewModel()
  {
  }
  public ViewModel(bool includeCategories)
  {
    this.Categories=SomeService.GetCategories();
  }

  public List<SelectListItem> Categories { set;get;}
  //other properties
}

由您决定如何处理此问题。没有书面规则。 按照您认为更具可读性和外观的方式。但就个人而言,我会将我的ViewModel保持为简单的POCO类,而不需要任何构造函数逻辑来加载数据。我很乐意在两种动作方法中调用GetCategories。对我来说,这看起来很干净,可读。