gpt4 book ai didi

asp.net-mvc - 在 MVC2 中的 EditorForModel 与 DisplayForModel 模式中显示不同的字段

转载 作者:行者123 更新时间:2023-12-04 02:38:18 25 4
gpt4 key购买 nike

我有一个具有 int StateID 的 View 模型字段和 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; }
}

我有一个只读 View ,它使用 DisplayForModel和使用 EditorForModel 的更新 View .我想要 DisplayForModel查看显示 StateName属性(property),以及 EditorForModel查看使用 StateID属性(我实际上是基于此渲染下拉列表)。

我一直无法弄清楚如何装饰我的 viewmodel 属性来创建这种行为。

最佳答案

对 CodeGrue 回答的评论。

使属性继承 IMetadataAware。这样您就不需要构建自己的 DataAnnotationsModelMetadataProvider。

新属性将变成:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class RenderModeAttribute : Attribute, IMetadataAware
{
public RenderMode RenderMode { get; set; }

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

public void OnMetadataCreated(ModelMetadata metadata)
{
switch (RenderMode)
{
case RenderMode.DisplayModeOnly:
metadata.ShowForDisplay = true;
metadata.ShowForEdit = false;
break;

case RenderMode.EditModeOnly:
metadata.ShowForDisplay = false;
metadata.ShowForEdit = true;
break;

case RenderMode.None:
metadata.ShowForDisplay = false;
metadata.ShowForEdit = false;
break;
}
}
}

public enum RenderMode
{
Any,
EditModeOnly,
DisplayModeOnly
}

关于asp.net-mvc - 在 MVC2 中的 EditorForModel 与 DisplayForModel 模式中显示不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com