2014-02-05 5 views
1

Я использую WebGrid MVC во время моего приложения, и он отлично работает. Я устанавливаю столбцы для сетки в свой код контроллера, а затем передаю это на мое представление. Добавить новый столбец, как это, где columns является List<MvcWebGridColumn>:Связывание столбца MVC WebGrid с значением свойства словаря источника

columns.Add(new WebGridColumn { ColumnName = "Path", Header = "Full Path", Filter = ... }); 

И тогда, на мой взгляд, я установить столбцы сетки с моей точки зрения модели, как это:

@grid.GetHtml(
    footerStyle: "hide", 
    mode: WebGridPagerModes.All, 
    htmlAttributes: new { id = @Model.Id }, 
    columns: @Model.Columns) 

Вплоть до этого момента, установка столбцов в коде отлично работала, поскольку столбцы были известны, свойства первого уровня моих моделей. Теперь все сложнее, и я не знаю, как справиться с этим с помощью WebGrid. Вот пример модель:

public class Requirement 
{ 
    public string Id { get; set; } 
    public string Path { get; set; } 
    public Dictionary<string, string> Fields { get; set; } 
} 

Я хочу, чтобы иметь возможность установить колонок а WebGrid в коде, используя значение из ключа Field словарного свойства. Я пытаюсь, но это не работает:

columns.Add(new WebGridColumn { ColumnName = String.Format("Fields[\"{0}\"]", key), Header = label }); 

Я попытался также положить метод метод GetFieldValue(string key) на моей Requirement модели, но это не нравится, что либо. Похоже, он может обрабатывать только точное соответствие идентификатора свойства объекта.

Я не уверен, что это возможно с помощью WebGrid из коробки или если я должен расширить функциональность. Заранее спасибо.

+0

Это сообщение может вам помочь: http://stackoverflow.com/questions/18317207/mvc-webgrid-dynamic-columns – ataravati

+0

Спасибо за ссылку, но этот человек знает идентификаторы вспомогательных свойств. Я пытаюсь получить значение для столбца из свойства словаря по ключу. – im1dermike

ответ

0

Я считаю, что я только что придумал способ справиться с этим, что не кажется слишком взломанным.

Чтобы повторить проблему, я считаю, что MVC WebGrid использует отражение для установки свойства ColumnName, поэтому строка, которую вы вводите для этого, должна быть непосредственно доступна через API объекта, например. "Id", "Field.Address.Name" и т. Д. Проблема в моем случае заключается в том, что значение, которое мне нужно для строки в столбце, поступает из Словаря, и похоже, что вы можете передать параметр (ключ, индекс и т. Д.) В ColumnName, чтобы получить значение мне нужно.

Мое решение состоит в том, чтобы полностью исключить использование свойства WebGrid ColumnName при разрешении отображаемого значения. Я просто вводил значение для модели сетки, которое, как я знаю, существует для ColumnName, в моем случае «Id». Это просто используется, чтобы WebGrid выдавал. Тогда, так как Format из WebGridColumn использует динамическую функцию, я могу определить свое значение столбца, используя все, что я хочу:

columns.Add(new WebGridColumn 
{ 
    ColumnName = "Id", 
    Header = field.Label, 
    Format = x => new HtmlString(x.Value.GetEntityFieldValue(field.Field)) 
}); 

вскоре я понял, что это испортит сортировки. Сортировка черного ящика MVC WebGrid просто использует ColumnName в запросе сортировки, поэтому каждый столбец для меня теперь имеет «? Sort = Id». Если вы не сортируете, тогда все в порядке. Если это так, вам нужно будет реализовать собственное решение для сортировки, которое я сейчас делаю.

Смежные вопросы