在 MVC2 中的 EditorForModel 与 DisplayForModel 模式中显示不同的字段
我有一个视图模型,它有一个 int StateID
字段和一个 string StateName
字段,如下所示:
public class DepartmentViewModel : BaseViewModel, IModelWithId
{
// only show in edit mode
public int StateId { get; set; }
// only show in display mode
public string StateName { get; set; }
}
我有一个使用 DisplayForModel
的只读视图和一个更新使用 EditorForModel
的视图。我希望 DisplayForModel
视图显示 StateName
属性,并且 EditorForModel
视图使用 StateID
属性(我是实际上基于此渲染一个下拉列表)。
我无法弄清楚如何装饰我的视图模型属性来创建这种行为。
I have a viewmodel that has an int StateID
field and a string StateName
field like so:
public class DepartmentViewModel : BaseViewModel, IModelWithId
{
// only show in edit mode
public int StateId { get; set; }
// only show in display mode
public string StateName { get; set; }
}
I have a read only view that uses DisplayForModel
and an update view that uses EditorForModel
. I want the DisplayForModel
view to show the StateName
property, and the EditorForModel
view use the StateID
property (I am actually rendering a dropdownlist based on this).
I have not been able to figure out how to decorate my viewmodel properties to create this behavior.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我想要一个更通用的解决方案,所以我创建了一个新属性:
并在我的自定义 DataAnnotationsModelMetadataProvider 中包含以下代码:
这样我就可以像这样装饰我的模型:
I wanted a solution that was more generic, so I created a new attribute:
And included the following code in my custom DataAnnotationsModelMetadataProvider:
So that I could just decorate my model as so:
这是我的自定义提供程序,我添加了 None 渲染模式
Here is my custom provider, I add a None render mode
覆盖模板:
在
~/Shared/EditorTemplates/DepartmentViewModel.ascx
中放置:并在
~/Shared/DisplayTemplates/DepartmentViewModel.ascx
中:Override the templates:
In
~/Shared/EditorTemplates/DepartmentViewModel.ascx
put:And in your
~/Shared/DisplayTemplates/DepartmentViewModel.ascx
:对 CodeGrue 答案的评论。
使属性继承 IMetadataAware。这样您就不需要构建自己的 DataAnnotationsModelMetadataProvider。
新属性将变成这样:
A comment on CodeGrue's answer.
Make the attribute inherit IMetadataAware instead. That way you don't need to build your own DataAnnotationsModelMetadataProvider.
The new attribute would become something like: