如何使用FubuMVC的DisplayFor与模型上的子列表项?

时间:2012-03-29 02:04:48

标签: .net fubumvc

假设我有以下视图模型。

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呈现每个客户吗?

提前致谢!

1 个答案:

答案 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) %>