是否查看下拉列表的逻辑?

时间:2015-10-27 07:36:35

标签: c# asp.net-mvc razor

我正在开发一个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范例。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您也可以只使用getter放置一个属性:

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

Organization模型上。或者使用此属性将其拆分为OrganizationViewModel

答案 3 :(得分:0)

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