Asp.net mvc 2 Asp MVC 2:类型化编辑器模板

Asp.net mvc 2 Asp MVC 2:类型化编辑器模板,asp.net-mvc-2,viewmodel,viewdata,strongly-typed-view,editorfor,Asp.net Mvc 2,Viewmodel,Viewdata,Strongly Typed View,Editorfor,(我在本文中引用) 我想使用Html.EditorFor(或Html.Editor)助手 如果用户控件需要额外的数据,则通过 …EditorFor(model=>model.Album,新的{Artists=model.Artists,…}) 在用户控件中,可通过查看数据[stringKey]访问它,即 。。。新建选择列表(ViewData[“艺术家”]作为IEnumerable,… 对我来说,这有点可疑,因为我更喜欢强类型的ViewModel,它可以确保特定的数据可用 我现在有点卡住了,因为我

(我在本文中引用)

我想使用Html.EditorFor(或Html.Editor)助手

如果用户控件需要额外的数据,则通过

…EditorFor(model=>model.Album,新的{Artists=model.Artists,…})

在用户控件中,可通过查看数据[stringKey]访问它,即

。。。新建选择列表(ViewData[“艺术家”]作为IEnumerable,…

对我来说,这有点可疑,因为我更喜欢强类型的ViewModel,它可以确保特定的数据可用

我现在有点卡住了,因为我不知道是有一种“键入方式”可以找到,还是应该接受这种方式

您是如何解决此问题的?感谢您的帮助

Lg

瓦拉帕

我可能会更改我的视图模型,这样我就不需要传递这些附加信息。例如,您可以制作一张专辑,其中包含一组艺术家。现在您需要做的就是:

<%: Html.EditorFor(model => model.Album) %>
model.Album)%%>
在编辑器模板中:

<%: Html.DropDownListFor(x => x.SelectedArtist, new SelectList(Model.Artists)) %>
x.SelectedArtist,新建SelectList(Model.Artists))%>

我认为“Album”不应该关心“我们都知道哪些艺术家?”之类的问题,但另一个问题是:直接从编辑器模板引用存储库是不是不好的做法?@Warappa,是的,从视图引用存储库是非常不好的。该视图仅显示从控制器传递的数据。应该由控制器来操作存储库。好的,我明白了。如果我想将其类型化,我是否必须为“Album”类型而非“AlbumEditorViewModel”类型创建用户控件(这是最好的方法吗)?@Warappa,当然,使用专门为给定视图定制的视图模型是最好的方法。如果有另一个复杂的嵌套对象也需要编辑(即SelectedArtist)外部viewmodel将包含内部viewmodel类型的属性?对吗?(编辑)。。。一个EditorTemplate调用另一个EditorTemplate没关系吧?