Как получить имя свойства модели в частичном представлении - PullRequest
1 голос
/ 09 февраля 2020

У меня есть ASP. NET Базовое частичное представление, которое запрашивает (например) имя и фамилию человека. Частичное представление использует эту модель представления:

// MyApp.NamePartialViewModel.cs
public class NamePartialViewModel{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Частичное представление отображает элементы ввода для своей модели представления, как показано здесь (очевидно, я опустил метки и ненавязчивый материал для проверки):

@* NamePartialView.cshtml *@
@model MyApp.NamePartialViewModel
<input asp-for="FirstName" />
<input asp-for="LastName>" />

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

// MyApp.MyViewModel.cs
public class MyViewModel {
  public NamePartialViewModel FirstPersonName { get; set; }
  public NamePartialViewModel SecondPersonName { get; set; }
}

И, наконец, родительское представление (отображается контроллером) выглядит следующим образом:

@model MyApp.MyViewModel
<form method="post">
  <partial name="NamePartialView" model="@Model.FirstPersonName" />
  <partial name="NamePartialView" model="@Model.SecondPersonName" />
</form>

Дело в том, что каждый элемент <partial> передает экземпляр NamePartialViewModel в частичное представление.

Мой вопрос: Есть ли способ, в частичном представлении (или в коде, вызываемом из частичного представления), получить имя свойства, связанного с моделью? Другими словами, я хочу обнаружить это (в этом примере) моя модель привязана к свойству с именем FirstPersonName или SecondPersonName (то есть именем свойства в модели родительского представления).

Итак, зачем вам это нужно, спросите вы? Потому что для правильной работы привязки модели в процедуре POST контроллера мне нужно добавить к имени свойства префикс атрибута <input> элемента *1021*, поэтому первый частичный вызов представления фактически отобразит что-то вроде этого:

<input name="FirstPersonName.FirstName" id="FirstPersonName_FirstName" />
<input name="FirstPersonName.LastName" id="FirstPersonName_LastName" />

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

1 Ответ

1 голос
/ 09 февраля 2020

При использовании тега partial при передаче модели с помощью for имя свойства будет доступно через ViewData.TemplateInfo.HtmlFieldPrefix в частичном представлении.

Пока вы используйте стандартные помощники, которые вам не нужно использовать ViewData.TemplateInfo.HtmlFieldPrefix, однако как автор помощника по тегам или как тот, кто хочет использовать ручную визуализацию тегов, вам нужно позаботиться об этом.

NamePartialView.cs html

@model MyApp.NamePartialViewModel

<label asp-for="FirstName" />
<input asp-for="FirstName" />
<label asp-for="LastName" />
<input asp-for="LastName" />

Just in case of creating manual tags, here is the prefix to use:
@ViewData.TemplateInfo.HtmlFieldPrefix

MyViewModel.cs html

@model MyApp.MyViewModel

<partial name="NamePartialView" for="FirstPersonName" />
<partial name="NamePartialView" for="SecondPersonName" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...