#asp.net-core-mvc
Вопрос:
У меня есть классическая страница индекса MVC с классическим циклом над IEnumerablelt;myclassgt;
моделью
@foreach (var item in Model) { lt;trgt; lt;tdgt;@Html.DisplayFor(modelItem =gt; item.name)lt;/tdgt; lt;!-- .... --gt; lt;/trgt; }
В пакете просмотра я получаю Listlt;stringgt;
объект, содержащий имена атрибутов myclass
, для которых на самом деле отображается столбец.
Идея состоит в том, чтобы поместить внутренний цикл foreach, зацикливающийся на списке:
@foreach (var item in Model) { lt;trgt; @foreach(string c in ViewBag.columns) { lt;tdgt;@Html.DisplayFor(???)lt;/tdgt; } lt;/trgt; }
Вопрос в том, как заменить параметр в DisplayFor, так как это лямбда-выражение. Моей первой идеей было использовать отражение
@foreach(string c in ViewBag.columns) { var n = item.GetType().GetProperty(c).GetType(); ParameterExpression p1 = Expression.Parameter(IEnumerablelt;myclassgt;, "modelItem"); ParameterExpression p2 = Expression.Parameter(item.GetType().GetProperty(c).GetType(), "item." c); Expressionlt;Funclt;IEnumerablelt;myclassgt;, dynamicgt;gt; exResult = Expression.Lambdalt;Funclt;IEnumerablelt;myclassgt;, dynamicgt;gt;(p1, p2); lt;tdgt;@Html.DisplayFor(exresult)lt;/tdgt; }
но это не удается, так как IEnumerablelt;myclassgt;
не может использоваться в качестве типа (по каким-либо причинам)
Я тоже пытался, @Html.Display(c, item)
но безуспешно.
Есть какие-нибудь предложения?
Комментарии:
1. Я думаю, вы можете объяснить, в каком виде хранятся данные
ViewBag
и какой внешний вид вы хотите отобразить в представлении….2.
ViewBag.columns
представляет собой список строк (как видно из предисловия и описано выше) Модель являетсяIEnumerablelt;myclassgt;
, как описано выше.
Ответ №1:
Я не уверен, но если вам нужно что-то вроде ниже?
lt;trgt; @foreach (var c in (ViewBag.Columns)) { lt;tdgt;item.@(c)lt;/tdgt; } lt;/trgt;
Комментарии:
1. К сожалению, нет, так как это просто отображает содержимое
item.whatever
. Мне на самом деле нужен HTML-код,HTML.DisplayFor(modelItem=gt;item.whatever)
который будет генерироваться на основе атрибутовitem.whatever