Return ViewModel 而不是 Model
Return ViewModel instead of Model
以下方法 returns 一个 IEnumerable
MODEL
调用 PROF
.
我不想使用模型,而是想使用包含与 Model PROF
相同字段的 viewModel
。我如何更改以下功能 return 我的 VIEWMODEL
(称为 MyProfViewModel
)而不是 model
(称为 PROF
)。
public async Task<ActionResult> Index()
{
var cp= db.PROF.Include(c => c.ACCOUNTS);
return View(await cp.ToListAsync());
}
ViewModel
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes{ get; set; }
}
型号
public class PROF
{
public int ID{ get; set; }
public string DESCRIPTION { get; set; }
}
添加 select 将一种类型映射到另一种类型的语句:
db.PROF.Include(c => c.ACCOUNTS)
.Select(x=> new MyProfViewModel(){myprofID = x.ID, ...});
根据您的 ORM 层是否支持此 select 语句(Entity Framework?),我会在 .ListAsync();
之前或之后执行此操作
之前的优点:可以更好地优化 SQL 查询。
Joel 的回答差不多就是这样。但是既然你说你是入门我会提供更详细的答案,让使用更清楚。
首先你定义一个转换,在本例中我把它放在 ViewModel 中,但你可以把它放在其他对你的项目更有意义的地方:
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes { get; set; }
public static MyProfViewModel FromModel(PROF model)
{
var viewModel = new MyProfViewModel()
{
myprofID = model.ID,
myprofDes = model.DESCRIPTION
};
return viewModel;
}
}
然后您只需在返回前应用转换:
public async Task<ActionResult> Index()
{
var cp = PROF.Include(c => c.ACCOUNTS);
var models = await cp.ToListAsync();
var viewModels = models.Select(MyProfViewModel.FromModel);
return View(viewModels);
}
顺便说一下,您也可以通过将其添加到您的 ViewModel 来转换为模型 class:
public PROF ToModel()
{
return new PROF()
{
ID = this.myprofID,
DESCRIPTION = this.myprofDes
};
}
希望对您有所帮助!
以下方法 returns 一个 IEnumerable
MODEL
调用 PROF
.
我不想使用模型,而是想使用包含与 Model PROF
相同字段的 viewModel
。我如何更改以下功能 return 我的 VIEWMODEL
(称为 MyProfViewModel
)而不是 model
(称为 PROF
)。
public async Task<ActionResult> Index()
{
var cp= db.PROF.Include(c => c.ACCOUNTS);
return View(await cp.ToListAsync());
}
ViewModel
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes{ get; set; }
}
型号
public class PROF
{
public int ID{ get; set; }
public string DESCRIPTION { get; set; }
}
添加 select 将一种类型映射到另一种类型的语句:
db.PROF.Include(c => c.ACCOUNTS)
.Select(x=> new MyProfViewModel(){myprofID = x.ID, ...});
根据您的 ORM 层是否支持此 select 语句(Entity Framework?),我会在 .ListAsync();
之前的优点:可以更好地优化 SQL 查询。
Joel 的回答差不多就是这样。但是既然你说你是入门我会提供更详细的答案,让使用更清楚。
首先你定义一个转换,在本例中我把它放在 ViewModel 中,但你可以把它放在其他对你的项目更有意义的地方:
public class MyProfViewModel
{
public int myprofID { get; set; }
public string myprofDes { get; set; }
public static MyProfViewModel FromModel(PROF model)
{
var viewModel = new MyProfViewModel()
{
myprofID = model.ID,
myprofDes = model.DESCRIPTION
};
return viewModel;
}
}
然后您只需在返回前应用转换:
public async Task<ActionResult> Index()
{
var cp = PROF.Include(c => c.ACCOUNTS);
var models = await cp.ToListAsync();
var viewModels = models.Select(MyProfViewModel.FromModel);
return View(viewModels);
}
顺便说一下,您也可以通过将其添加到您的 ViewModel 来转换为模型 class:
public PROF ToModel()
{
return new PROF()
{
ID = this.myprofID,
DESCRIPTION = this.myprofDes
};
}
希望对您有所帮助!