首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示EditorForModel中的不同字段与MVC2中的DisplayForModel模式

显示EditorForModel中的不同字段与MVC2中的DisplayForModel模式
EN

Stack Overflow用户
提问于 2010-06-02 23:14:20
回答 4查看 3.9K关注 0票数 10

我有一个视图模型,它有一个int StateID字段和一个string StateName字段,如下所示:

代码语言:javascript
运行
复制
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属性(我实际上是基于此呈现一个下拉列表)。

我还没有弄清楚如何装饰我的视图模型属性来创建这个行为。

EN

Stack Overflow用户

回答已采纳

发布于 2010-06-03 02:10:56

我想要一个更通用的解决方案,所以我创建了一个新属性:

代码语言:javascript
运行
复制
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class RenderModeAttribute : Attribute
{
    public RenderMode RenderMode { get; set; }

    public RenderModeAttribute(RenderMode renderMode)
    {
        RenderMode = renderMode;
    }
}

public enum RenderMode
{
    Any,
    EditModeOnly,
    DisplayModeOnly
}

并在我的自定义DataAnnotationsModelMetadataProvider中包含了以下代码:

代码语言:javascript
运行
复制
var renderModeAttribute = attributes.OfType<RenderModeAttribute>();
if (renderModeAttribute.Any())
{
    var renderMode = renderModeAttribute.First().RenderMode;
    switch (renderMode)
    {
        case RenderMode.DisplayModeOnly:
            metadata.ShowForDisplay = true;
            metadata.ShowForEdit = false;
            break;
        case RenderMode.EditModeOnly:
            metadata.ShowForDisplay = false;
            metadata.ShowForEdit = true;
            break;
    }
}

这样我就可以这样装饰我的模型了:

代码语言:javascript
运行
复制
public class DepartmentViewModel    
{     
    [RenderMode(RenderMode.EditModeOnly)]   
    public int StateId { get; set; }     

    [RenderMode(RenderMode.DisplayModeOnly)]    
    public string StateName { get; set; }     
} 
票数 14
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2959041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档