【问题标题】:View logic or not for Drop Down list?是否查看下拉列表的逻辑?
【发布时间】:2015-10-27 16:30:39
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序。我有以下课程:

public class Organization {
    // Organization ID
    public int Id {get; set;}
    // Organization name
    public string Name {get; set;}
    // City where organization is located
    public string CityName {get;set;}
}

这个类在模型中使用:

public class OrganizationsModel {
    public Organization[] Organizations { get; set; }
}

在一个视图中,我要呈现用于选择组织的下拉列表:

@Html.DropDownList("org", Model.OrganizationsList.Select(x => new SelectListItem { Value = x.Id, Text = String.Format("{0} ({1})", x.Name, x.CityName) }))

我对此有些担心:

new SelectListItem { Value = x.Id, Text = String.Format("{0} ({1})", x.Name, x.CityName) }

视图是为下拉列表中的每个选项组合文本的错误位置吗?也许我应该将此代码放置到查看模型或控制器?看起来像当前的代码破坏 MVC 范例。

【问题讨论】:

  • 根据我的意见,这很好。您至少可以在视图中使用它。理想情况下,您不应在视图中使用任何数据操作类型的逻辑。

标签: c# asp.net-mvc razor


【解决方案1】:

您在视图中执行的代码仅与创建显示元素有关,因此视图似乎是执行此操作的正确位置。你不想在你的模型或控制器中创建SelectListItem,一个只与显示相关的类。

【讨论】:

    【解决方案2】:

    在我看来,这完全没问题。该视图是根据 gui 需求量身定制的。如果您可以在不创建模型字段的情况下将连接的信息推送到视图中,那很好。

    【讨论】:

      【解决方案3】:

      你也可以只放置一个只有 getter 的属性:

      public string GetCombinedName {
          get {
              return String.Format("{0} ({1})", this.Name, this.CityName);
          }
      }
      

      Organization 型号上。或者将其拆分为 OrganizationViewModel 并启用此属性。

      【讨论】:

        【解决方案4】:

        我也同意这在视图中完全没问题,但我要说的是,您应该确保如果 多个视图 需要此逻辑,则不应重复中的逻辑另一个视图,您应该将其推送到共享逻辑中,例如在您的业务层中,或者到 Html 助手中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-10
          • 2021-06-09
          • 2023-04-05
          相关资源
          最近更新 更多