代码之家  ›  专栏  ›  技术社区  ›  Brian

用于HiddenInput的Asp.Net MVC ModedMetadata问题

  •  4
  • Brian  · 技术社区  · 16 年前

    我在一个dll中有一个非常简单的视图模型,我想将它与主web mvc项目分开。

    我正在用元数据属性装饰模型,这些属性将有助于ui显示正确的表示(DisplayName、UIHint、DataType、ReadOnly等),我希望以后在不同的表示层(如Silverlight)中重用这些信息

    大多数属性来自名称空间System.ComponentModel.DataAnnotations 但我惊讶地发现 是一个例外,我需要在视图模型dll中添加对System.Web.Mvc的引用。

    我试图重写将HiddenInput.ascx放入editortemplates文件夹中的默认行为,但在我的视图中调用html.EditorfForModel()时,仍然获得该字段的标签。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Darin Dimitrov    16 年前

    我相信没有被包括在 System.ComponentModel.DataAnnotations 因为此程序集是BCL的一部分,在ASP.NET MVC之前存在。布拉德·威尔逊写了一篇很好的 blog post 在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 解决方法。。