1

假设我们有这样的东西

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
}

public class PersonViewModel
{
   public Person Person {get; set;}
   public SelectList Countries {get; set;}
}

可以使用 automapper 来执行从 Person 解析到 PersonViewModel 并返回吗?

4

3 回答 3

3

不要为此使用 AutoMapper - 这不值得。例如,在验证失败并再次显示表单的情况下 - AutoMapper 不会在此处执行(通常)。我们通常走两条路:

  • 如果列表不是特定于上下文的,则创建一个 HtmlHelper 来查询某些 ISelectListProvider 以获取选择列表项:Html.DropDownList()。您将使用您选择的 IoC 容器来定位 personListProvider、查询项目列表并填充下拉列表。
  • 如果列表是特定于上下文的,只需在控制器操作中构造列表
于 2009-11-10T14:52:19.390 回答
2

听起来您想通过 PersonViewModel 将 Person 发送到视图,其中包含您生成和返回新(或更新)Person 对象所需的所有奖励信息。

如果这是正确的,我认为您根本不需要自动映射器。根据我对 automapper 的理解,它用于将相关对象的集合映射到更多视图模型类型的状态,但在这种情况下,您正在向客户端发送一个 Person 并尝试接收一个 Person 返回。在这种情况下,使用视图模型填充页面似乎更容易,但让页面返回一个 Person (或从视图模型中提取更新的 Person 以节省一些击键)。


编辑:话虽如此,是的,您应该能够使用自动映射器来移动信息。对于这个简单的场景,它只是一个不必要的层。

于 2009-11-09T17:16:22.993 回答
2

如果有人选择,你可以这样做:

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
   public Country[] GetCountries 
   {
    ... add method for countries here
   }
}

然后在您的 ViewModel 中,您可以让您的选择列表从该集合中提取数据。

public class PersonViewModel
{
   public Person Person {get; set;}
   public Country[] Countries {get; set;}
   public SelectList Countries { get{ .. add new select list code here getting vals from Countries..}}
}

同样,这适用于上下文敏感列表。但是,您在这里有点混淆了问题(一个人应该获得国家/地区列表吗?)

于 2010-01-19T16:10:35.563 回答