Можно ли узнать имя переменной [дубликата]

1

Одно замечание: мне нужно получить имя переменной, а не имя свойства.

У меня есть сценарий, когда мне нужно передать в список "Список" или "Список".

поэтому в частичном представлении я привязываю модель к динамической:

@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. Но я не могу найти правильный способ его использования. Может ли кто-нибудь помочь, пожалуйста?

  • 0
    Где вы используете GetMemberName ? Как вы звоните GetMemberName ? это имеет значение; но: списки не имеют имен; переменные только имеют имена; все зависит от контекста, следовательно, необходимо увидеть, как вы используете GetMemberName .
  • 0
    Привет @MarcGravell да, вы правы. Я называю метод в моем частичном представлении. пожалуйста, проверьте мой обновленный пост. Спасибо
Показать ещё 6 комментариев
Теги:
asp.net-mvc
asp.net-mvc-4

1 ответ

2

Имена относительны. Сам список не имеет имени.

Одно замечание: мне нужно получить имя переменной, а не имя свойства.

При использовании метода:

var nameOfParameter = Web.Controllers.MemberInfoGetting.GetMemberName(() => Model);

Название здесь - Model, а Model - свойство; это не переменная. Вы получили название свойства: "Model". Однако вы не можете получить имя, как это было бы в вызывающем контексте (даже в обычном С# это сложно, но между представлениями это практически невозможно).

Как и в случае с этим методом GetMemberName, если вы использовали его для получения имени переменной, то в терминах IL это фактически перестало бы быть переменной и вместо этого стало полем - поскольку именно так реализованы "захваченные переменные" компилятором.

Вместо этого вы должны отказаться от имени, которое вы хотите; либо как дополнительный контекст в представлении, либо как модель представления, которая инкапсулирует список и имя, или создавая концепцию "названный список" (возможно, подклассифицируя List<T> или аналогичный, или добавляя интерфейс INamedList).

  • 0
    привет Марк, я понял твою точку зрения, спасибо. Теперь я пытаюсь передать имя с помощью Html.RenderPartial (). Пожалуйста, смотрите мое обновление. Спасибо
  • 0
    @Franva с правкой, Model.List и Model.ListName должны работать.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню