Одно замечание: мне нужно получить имя переменной, а не имя свойства.
У меня есть сценарий, когда мне нужно передать в список "Список" или "Список".
поэтому в частичном представлении я привязываю модель к динамической:
@model dynamic
var nameOfParameter = Web.Controllers.MemberInfoGetting.GetMemberName(() => Model);
@foreach (var value in list)
{
<td>@Html.Editor(value, "DoubleTemplate", new { Column = count, Switcher = (YearOfProgram >= count)})</td>
sum += (double)value;
++count;
}
И так я называю частичный вид из основного представления:
@Html.Partial("_myPartial", Model.CategoryList)
Затем я обнаружил, что мне нужно знать имя (CategoryList) списка, которое передается в частичное представление.
Здесь я нашел много сообщений об использовании чего-то вроде этого:
public static class MemberInfoGetting
{
public static string GetMemberName<T>(Expression<Func<T>> memberExpression)
{
MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
return expressionBody.Member.Name;
}
}
}
Этот код не работает для меня, так как результат (nameOfParameter), вызывающий его, всегда будет "Model", а не "CategoryList".
Поэтому мне интересно, можно ли достичь того, чего я хочу?
Спасибо.
Update1
Причина, по которой мне нужно передать имя списка, - это то, что мне нужно имя списка, чтобы сформировать имя в элементе html, например: CategoryList_1. Итак, Razor знает, что я пытаюсь связать значение текстового поля с 1-й элемент свойства в моей модели.
class MyViewModel
{
................
public List<double> CategoryList {get; set;}
................
}
Update2
@Html.RenderPartial("_VerificationSummarySection",new { ListName = "PracticeEvaluationCreditsVerifiedList", List = Model.PracticeEvaluationCreditsVerifiedList})
Теперь я пытаюсь передать имя списка с помощью RenderPartial. Но я не могу найти правильный способ его использования. Может ли кто-нибудь помочь, пожалуйста?
Имена относительны. Сам список не имеет имени.
Одно замечание: мне нужно получить имя переменной, а не имя свойства.
При использовании метода:
var nameOfParameter = Web.Controllers.MemberInfoGetting.GetMemberName(() => Model);
Название здесь - Model
, а Model
- свойство; это не переменная. Вы получили название свойства: "Model"
. Однако вы не можете получить имя, как это было бы в вызывающем контексте (даже в обычном С# это сложно, но между представлениями это практически невозможно).
Как и в случае с этим методом GetMemberName
, если вы использовали его для получения имени переменной, то в терминах IL это фактически перестало бы быть переменной и вместо этого стало полем - поскольку именно так реализованы "захваченные переменные" компилятором.
Вместо этого вы должны отказаться от имени, которое вы хотите; либо как дополнительный контекст в представлении, либо как модель представления, которая инкапсулирует список и имя, или создавая концепцию "названный список" (возможно, подклассифицируя List<T>
или аналогичный, или добавляя интерфейс INamedList
).
Model.List
и Model.ListName
должны работать.
GetMemberName
? Как вы звонитеGetMemberName
? это имеет значение; но: списки не имеют имен; переменные только имеют имена; все зависит от контекста, следовательно, необходимо увидеть, как вы используетеGetMemberName
.