假设我有以下视图模型。
public class CustomerListViewModel {
public IEnumerable<CustomerViewModel> Customers { get; set; }
}
public class CustomerViewModel {
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
我想在for-each循环中的视图中显示Customers列表。我还想使用DisplayFor来显示应用约定的值(而不是按原样输出属性:customer.Age)。使用ASP.NET MVC,我过去常常忽略我的表达式中的lambda变量(正如this question的提问者所发现的那样)。
<% foreach (var customer in Model.Customers) { %>
...
<li><%: this.DisplayFor(m => customer.Age) %></li>
<% } %>
但是,如果我这样做,我会收到FubuMVC的错误。
无法将类型为“System.Reflection.RtFieldInfo”的对象强制转换为类型 'System.Reflection.PropertyInfo'。
我必须使用partial来适当地使用DisplayFor呈现每个客户吗?
提前致谢!
答案 0 :(得分:4)
在这个特殊的显示用途中:
<%: this.DisplayFor(m => customer.Age) %>
重载正在寻找引用m成员的Expression。这里使用“客户”是导致反射异常的原因。
此处还有一个重载:https://github.com/DarthFubuMVC/fubumvc/blob/master/src/FubuMVC.Core/UI/FubuPageExtensions.cs#L229
这个允许您明确指定模型类型和实例:
<%: this.DisplayFor<Customer>(customer, c => c.Age) %>