Я использую сетку пользовательского интерфейса Infragistics Ignite в своем приложении ASP.NET MVC 4. Вот как это выглядит в представлении:
@model IQueryable<User>
@( Html.Infragistics().Grid( Model )
.AutoGenerateColumns( false )
.Columns( column => {
column.For( p => p.Id)
.HeaderText( "ID" );
column.For( p => p.Name )
.HeaderText( "Name" );
} )
.DataSourceUrl( Html.BuildUrlFromExpression<UserController>( c => c.GetUsers() ) )
.Features( feature => {
feature.Paging().Type( OpType.Remote );
feature.Sorting().Type( OpType.Remote ).CaseSensitive( false );
feature.Filtering().Type( OpType.Remote );
feature.Resizing();
feature.Tooltips();
} )
.Width( "100%" )
.DataBind()
.Render() )
Одним из свойств объекта User является дочерняя сущность, которая может иметь значение null. Вот суть схемы:
public class User
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Role Role { get; set; }
}
public class Role
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
}
Сетка отлично работает, но мне нужно отобразить свойство Description дочернего элемента Role в столбце. Кажется, это должно быть достаточно просто, но я не смог понять это. Например, это не работает, потому что роль иногда имеет значение null (она показывает строку заголовка сетки и значок постоянной загрузки):
.Columns( column => {
column.For( p => p.Id)
.HeaderText( "ID" );
column.For( p => p.Name )
.HeaderText( "Name" );
column.For( p => p.Role.Description )
.HeaderText( "Role" );
} )
Это тоже не работает:
column.For( p => p.Role.Description )
.HeaderText( "Role" )
.Template( "${Site.Name}" );