需要注意的一点是:我需要获取变量的名称,而不是属性的名称。
我有一个场景,我需要将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传递列表名称。但是,我找不到正确的方法来使用它。有人可以帮忙吗?
答案 0 :(得分:2)
名字是相对的。列表本身没有名称。
需要注意的一点是:我需要获取变量的名称,而不是属性的名称。
在您使用该方法时:
var nameOfParameter = Web.Controllers.MemberInfoGetting.GetMemberName(() => Model);
此处的名称 Model
,Model
属性<;它不是变量。您已获得该属性的名称:"Model"
。但是,您不能获得在调用上下文中的名称(即使在常规C#中这很难;但在视图之间,它基本上是不可能的)。
顺便说一下,使用GetMemberName
方法,如果你 使用它来获取变量的名称,用IL术语它实际上会< em>停止是一个变量,而是成为字段 - 因为这就是编译器实现“捕获变量”的方式。
您应该可以传递您想要的名称;或者作为视图的附加上下文,或者作为封装列表和名称的视图模型,或者通过创建“命名列表”概念(可能通过子类化List<T>
或类似的,或者通过添加INamedList
接口)。