我想一個解決方案,更通用的,所以我創建了一個新的屬性:
[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下面的代碼:
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;
}
}
所以,我可能只是裝點我的模型像這樣:
public class DepartmentViewModel
{
[RenderMode(RenderMode.EditModeOnly)]
public int StateId { get; set; }
[RenderMode(RenderMode.DisplayModeOnly)]
public string StateName { get; set; }
}
如何實現自定義DataAnnotationsModelMetadataProvider?謝謝。 – UpTheCreek 2010-08-04 12:57:00
@UpTheCreek - 從DataAnnotationsModelMetadataProvider繼承。 http://weblogs.asp.net/seanmcalinden/archive/2010/06/11/custom-asp-net-mvc-2-modelmetadataprovider-for-using-custom-view-model-attributes.aspx – CodeGrue 2010-08-04 13:02:59
感謝您分享您的解。如果你可以詳細說明第二個代碼段需要去哪裏(我假設我們需要重寫CreateMetadata並將其放在那裏?)以及一旦創建後如何註冊我們的自定義DataAnnotationsModelMetadataProvider,這將是有用的。 – mutex 2011-02-06 21:48:59