Можно ли создать LabelTemplates для Html.Label и Html.LabelFor () в ASP.NET MVC? - PullRequest
1 голос
/ 17 января 2012

По сомнительным, но практичным причинам я хотел бы создать значения по умолчанию LabelTemplate, например EditorTemplates или DisplayTemplates.

Поэтому вместо этого:

@Html.LabelFor(x => x.PropertyName, "Property Name")

или вместо(лучший способ сделать это в View Model):

[DisplayName("Property Name")]
public string PropertyName{ get; set; } 

Я хочу это:

@Html.LabelFor(x => x.PropertyName)

С этим (в такой папке:/ Views / Shared / LabelTemplates)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.String>" %>
//Display logic here

Можете ли вы помочь кодеру?

Ответы [ 3 ]

1 голос
/ 17 января 2012

Создайте свой собственный помощник HTML.

http://develoq.net/2011/how-to-create-custom-html-helpers-for-asp-net-mvc-3-and-razor-view-engine/

0 голосов
/ 21 января 2012

Я знаю, что это не совсем ответ на ваш вопрос, но, поскольку я все еще хочу предложить план действий, я опубликую его так, а не в комментарии.


Вы уверены, что хотите это?

Если вам удастся сделать это, вы установите для метку поля какое-то значение на основена его тип .На первый взгляд это может показаться заманчивым - вы можете сэкономить несколько нажатий клавиш здесь и там.

Но что произойдет, если, например, у вас есть тип Address, содержащий некоторые свойства для названия улицы, номера, почтового индексаи т.д., а затем хотите, чтобы пользователь заполнил домашний адрес и рабочий адрес в одной и той же форме - как бы вы пометили их по-разному и все еще использовали один и тот же тип?И что еще хуже - вы действительно хотите, чтобы на всех ваших струнах был один и тот же ярлык?Чтобы избежать этих двух сценариев, вам все равно придется прибегнуть к Html.DisplayFor(m => m.PropertyName, "TemplateName"), что означает, что вы будете в такой же жалкой ситуации, как и сейчас.Кроме того, у вас будет как минимум два места, в которых вам нужно искать правильную логику отображения для вашего ярлыка, а не только одно.

Помните, что нет абсолютного требования использовать LabelFor() помощник -вы также можете просто накатить свой собственный метод расширения на HtmlHelper или даже проигнорировать их и вывести плоскость HTML:

<label for="Person_HomeAddress">Home address</label> <!-- the ID might be wrong -->
<%: Html.EditorFor(m => m.HomeAddress) %>

Поскольку EditorFor() выводит идентификатор, соответствующий имени модели иИмена свойств, все будет в порядке.

0 голосов
/ 17 января 2012

Это код, который вы можете использовать для преобразования имен вашей собственности:

Regex.Replace("PropertyName", "[a-z][A-Z]", m => m.Value[0] + " " + m.Value[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...