【问题标题】:ASP.NET MVC 2: Data Annotation or Template: way to associate a DDL to its Model.data option list?ASP.NET MVC 2:数据注释或模板:将 DDL 与其 Model.data 选项列表相关联的方法?
【发布时间】:2011-07-31 14:41:37
【问题描述】:

总结:

如果您使用 ASP.NET MVC 2 的模板来呈现 DropDownList,如果选项列表存储在顶级视图的 Model.property 中,您将如何访问它们?另外,是否有一些 [DataAnnotation] 方法来关联这个列表?示例链接会很有帮助。

背景:

在 ASP.NET MVC 2 中,您可以创建像 StateName 这样的自定义类并使用名为 StateName.ascx 的 EditorTemplate,它会在找到 StateName 属性时显示该部分视图。 Brad Wilson 有一篇很棒的文章 here 描述它。这些局部视图模板可以嵌套,以便每个模板只处理它自己的范围(将模板的范围与匹配的 POCO 的属性匹配)。

设置:

现在假设StateName.ascx 呈现一个 DropDownList 并需要可能的状态列表([{"AL","Alabama"},{"PA","Pennsylvania"},...])。通常,顶级视图模型拥有我们渲染 DomainModel(如我们的 ShoppingCart)和任何其他数据(如下拉列表)所需的一切。

问题:

那么,问题是局部视图模板StateName.ascx 如何引用非局部顶层视图的模型属性IList<StateName> States 来填充局部视图模板中的 DDL?(尤其是如果您有多个嵌套或deep dive 渲染,例如 Model.Customer[0].BillingAddress.State,模板的父视图可能不是顶级视图)。

另一个角度可能是在将这个可能状态列表与局部视图模板的模型相关联的类属性上放置某种[Data Annotation]?

例如,这是顶层视图的模型:

Model.ShoppingCart.Customer.ShippingAddress;
Model.ShoppingCart.Customer.BillingAddress;
Model.StateNames;         // IList<StateName>
Model.MaritalStatusNames; // IList<MaritalStatus>
Model.GenderNames;        // IList<Gender>

此外,我们可以在一个属性中创建所有 DDL 数据列表,例如 Model.DDLs.StateNamesModel.DDLs.GenderNames 等?

【问题讨论】:

    标签: templates asp.net-mvc-2 viewmodel


    【解决方案1】:

    我认为简短的回答是部分模板无法访问父模型的整个模型,因为它只接收它打算使用的子模型。

    在您的情况下(即不变的事物的全局列表),您始终可以在某个辅助对象的静态属性中声明您的列表,这样您就不需要模型实例来访问它。例如,您的 Address 对象可能具有所有状态的静态列表。

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多