【发布时间】: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.StateNames、Model.DDLs.GenderNames 等?
【问题讨论】:
标签: templates asp.net-mvc-2 viewmodel