Asp.Net MVC Вопрос ModedMetadata для HiddenInput - PullRequest
4 голосов
/ 13 октября 2010

У меня есть очень простая модель представления в dll, которую я хочу отделить от основного проекта web mvc.

Я украшаю модель атрибутами метаданных, которые помогут пользовательскому интерфейсу отображать правильное представление(DisplayName, UIHint, DataType, ReadOnly и т. Д.), И я хотел бы повторно использовать эту информацию с различными уровнями представления позже (например, Silverlight)

Большинство атрибутов поступают из пространства имен System.ComponentModel.DataAnnotations, но я былс удивлением обнаружил, что HiddenInput является исключением из этого, и мне нужно добавить ссылку на System.Web.Mvc в моей dll-модели представления.

Есть ли конкретная причина не иметьВключено ли это с другими атрибутами?

Я попытался переопределить поведение по умолчанию, поместив HiddenInput.ascx в папку editortemplates, но я по-прежнему получаю метку для поля, когда вызываю html.EditorfForModel () в моем представлении..

1 Ответ

3 голосов
/ 13 октября 2010

Я считаю, что причина не включения в System.ComponentModel.DataAnnotations заключается в том, что эта сборка является частью BCL и существовала до ASP.NET MVC. Брэд Уилсон написал хороший пост в блоге , посвященный метаданным модели в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...