我在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 解决方法..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top