Расширение шаблонов HiddenFor в ASP.NET MVC

Я думал, что Html.HiddenFor может использовать такие шаблоны, как Html.DisplayFor или Html.EditorFor. К сожалению, метод не принимает TemplateName, как другие.

Я знаю, что обходным путем было бы использование шаблона DisplayFor/EditorFor с HiddenFors. Но я хотел бы узнать, как расширить метод Html.HiddenFor. Кто угодно?

С Уважением


person float    schedule 09.07.2013    source источник


Ответы (3)


Похоже, вы ввели в заблуждение неправильной аналогией. HiddenFor точно соответствует тегу <input type="hidden"/>. Так же, как TextBoxFor, CheckBoxFor и т. д. Эти методы не предназначены для использования шаблонов. DisplayFor/EditorFor на другой стороне специально созданы для использования с шаблонами, определенными в проекте. Таким образом, то, о чем вы просите, невозможно из коробки.

Однако вы всегда можете определить свою собственную перегрузку для HiddenFor с любым набором параметров и любой логикой, которая вам может понадобиться.

person Andrei    schedule 09.07.2013

Есть перегрузка, которая принимает дополнительный параметр — htmlAttributes. И вы можете использовать его для добавления некоторых атрибутов к тегу результата.

Также второй способ - создать частичное представление бритвы в одной из папок.

~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml
~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml
~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml
~/Views/Shared/DisplayTemplates/TemplateName.cshtml

с именем HiddenInput.cshtml

person Ivan Manzhos    schedule 09.07.2013

Вот что вы делаете: создаете его как шаблон редактора, потому что, как указал Андре, HiddenFor эквивалентен вспомогательным методам, таким как TextBoxFor и CheckboxFor.

Скорее всего, вам тоже понадобится настоящий редактор, поэтому поместите свой настоящий редактор под ~/Shared/EditorTemplates. Мы поместим наш «скрытый редактор» под контроллер, на котором вы хотите его использовать.

~/Views/ControllerName/EditorTemplates/ModelName.cshtml

Допустим, у нас есть модель Person.

public class Person
{
    public string First { get; set; }
    public string Last { get; set; }
}

Мы создадим частичное представление.

@Model Person

@Html.HiddenFor(p => p.First);
@Html.HiddenFor(p => p.Last);

А затем мы представим, что у нас есть модель, которая содержит Person в качестве свойства. С нашего основного вида мы называем наш «скрытый редактор» вот так.

@Model Foo

@Html.EditorFor(f => f.Person)

Легкий гороховый лимонный сок. Немного хакерский, но он работает как шарм.

person RubberDuck    schedule 06.02.2016
comment
Спасибо за это, но, как я уже сказал в своем вопросе, я уже знаю, что это возможный обходной путь :-) - person float; 08.02.2016
comment
Это было не для тебя @float. Это было сделано для того, чтобы спасти следующего парня вроде меня, который гуглится и находит этот вопрос/ответ абсурдным количеством времени. - person RubberDuck; 08.02.2016