4

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

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

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

是否有特别的理由不将其包含在其他属性中?

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

4

1 回答 1

3

我相信不包含在其中的原因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解决方法..

于 2010-10-13T16:44:38.440 回答