是否可以知道变量的名称

时间:2014-09-04 06:45:47

标签: c# asp.net-mvc asp.net-mvc-4

需要注意的一点是:我需要获取变量的名称,而不是属性的名称。

我有一个场景,我需要将List或List传递给视图。

所以在局部视图中我将模型绑定到动态:

@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 )调用它的结果将永远是&#34; Model&#34;而不是&#34; CategoryList&#34 ;

所以我想知道,有可能达到我的目的吗?

谢谢。


UPDATE1

我需要传递列表名称的原因是因为我需要列表的名称来将html元素上的名称形成为: 的 CategoryList_1 所以Razor知道我试图将文本框的值绑定到我的视图模型中属性的第一个元素。

class MyViewModel
{
................
public List<double> CategoryList {get; set;}
................
}

UPDATE2

  @Html.RenderPartial("_VerificationSummarySection",new { ListName = "PracticeEvaluationCreditsVerifiedList", List = Model.PracticeEvaluationCreditsVerifiedList})

我现在正尝试使用RenderPartial传递列表名称。但是,我找不到正确的方法来使用它。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

名字是相对的。列表本身没有名称

  

需要注意的一点是:我需要获取变量的名称,而不是属性的名称。

在您使用该方法时:

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

此处的名称 ModelModel 属性<;它不是变量。您已获得该属性的名称:"Model"。但是,您不能获得在调用上下文中的名称(即使在常规C#中这很难;但在视图之间,它基本上是不可能的)。

顺便说一下,使用GetMemberName方法,如果你 使用它来获取变量的名称,用IL术语它实际上会< em>停止是一个变量,而是成为字段 - 因为这就是编译器实现“捕获变量”的方式。

您应该可以传递您想要的名称;或者作为视图的附加上下文,或者作为封装列表名称的视图模型,或者通过创建“命名列表”概念(可能通过子类化List<T>或类似的,或者通过添加INamedList接口)。