ASP.NET MVC ModedMetadata for HideadInput问题
-
29-09-2019 - |
题
我在DLL中有一个非常简单的视图模型,我想将其与主要的Web MVC项目分开。
我正在使用元数据属性来装饰该模型,这些属性将帮助UI显示正确的演示文稿(DisplayName,UIHINT,DATATYPE,READONLY等),我想在以后使用不同的演示层(例如Silverlight)重复使用此信息(例如Silverlight)
大多数属性来自命名空间system.com.ponentmodel.dataannotations,但我很惊讶地发现 隐藏式 是一个例外,我需要在我的视图模型dll中添加对system.web.mvc的引用。
是否有特殊原因不将其与其他属性一起包含?
我试图覆盖将hiddenInput.ascx放在editortemplates文件夹中的默认行为,但是当我在我的视图中调用html.editorforformodel()时,我仍然在字段中获得该字段的标签。
解决方案
我相信没有被包括在 System.ComponentModel.DataAnnotations
是因为该组件是BCL的一部分,并且存在于ASP.NET MVC之前。布拉德·威尔逊(Brad Wilson)写了一个很好的 博客文章 涵盖您可能会阅读的MVC中的模型元数据。
有人说你可以使用 [UIHint]
这样的属性:
public class MyViewModel
{
[UIHint("Hidden")]
public string Value { get; set; }
}
并在 ~/Views/Home/EditorTemplates/Hidden.ascx
:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%: Html.HiddenFor(x => x) %>
现在您可以使用 <%= Html.EditorForModel() %>
在您的视图中,它将选择自定义模板。
当然使用 [HiddenInput]
首选是因为它使您少编写代码,但如果您不想参考 System.Web.Mvc
在您的项目中,您仍然有 UIHint
解决方法..