gpt4 book ai didi

asp.net-mvc - 我应该在这里使用 View 模型吗?

转载 作者:行者123 更新时间:2023-12-04 16:36:39 25 4
gpt4 key购买 nike

所以可以说我有两个模型:
事物和状态。 Thingy有一个 Status ,Status 有很多东西。这是典型的“对象和对象类型关系”。

我有一个观点,我只想要每个状态下的事物数量。或者基本上是 Status.Name 和 Status.Thingies.Count 的列表。我完全可以做到这一点,但是“ right ”要以以下形式创建 View 模型:

ThingiesByStatusViewModel
-StatusName
-StatusThingiesCount

并将其与 AutoMapper 之类的东西连接起来。

对于这样一个微不足道的例子,它可能没有太大区别,但它会帮助我更好地理解正确的“关注点分离”。

最佳答案

Should I use a viewmodel here?



这是一个修辞问题吗?

您的 View 模型看起来与您建议的完全一样,并且完全适合您在此处尝试显示的内容:
public class ThingiesByStatusViewModel
{
public string StatusName { get; set; }
public int StatusThingiesCount { get; set; }
}

然后你的 Controller 会返回一个 IEnumerable<ThingiesByStatusViewModel> .然后在您的 View 中,您可以简单地使用显示模板:
@Html.DisplayForModel()

以及相应的显示模板( ~/Views/Shared/DisplayTemplates/ThingiesByStatusViewModel.cshtml ):
@model AppName.Models.ThingiesByStatusViewModel
<div>
<span>StatusName: @Model.StatusName</span>
<span>Number of thingies: @Model.StatusThingiesCount</span>
</div>

现在让我们看看映射层。假设我们有以下域:
public class Thingy
{ }

public class Status
{
public string StatusName { get; set; }
public IEnumerable<Thingy> Thingies { get; set; }
}

我们有一个 IEnumerable<Status> 的实例.

映射定义可能如下所示:
Mapper
.CreateMap<Status, ThingiesByStatusViewModel>()
.ForMember(
dest => dest.StatusThingiesCount,
opt => opt.MapFrom(src => src.Thingies.Count())
);

最后 Controller Action 将是:
public ActionResult Foo()
{
IEnumerable<Status> statuses = _repository.GetStatuses();
IEnumerable<ThingiesByStatusViewModel> statusesVM = Mapper.Map<IEnumerable<Status>, IEnumerable<ThingiesByStatusViewModel>>(statuses);
return View(statusesVM);
}

关于asp.net-mvc - 我应该在这里使用 View 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com