Сетка.Ошибка сортировки MVC

#asp.net-mvc #sorting #grid.mvc

#asp.net-mvc #сортировка #grid.mvc

Вопрос:

Сетка.Сортировка MVC работает не так, как ожидалось. Например, у меня есть столбец с числовым значением, а также значениями даты. Предоставленные снимки экрана показывают, что только общая сортировка премиум-класса работает неправильно, но то же самое происходит и в столбце Дата вступления в силу. Есть ли что-то еще, что мне нужно сделать, чтобы указать его номер или дату, чтобы он правильно сортировался?

 @Html.Grid(Model.SearchResult).Named("searchGrid").Columns(col =>
{
col.Add(c => c.PolicyNumber).Titled("Number").Sortable(true);
col.Add(c => c.FormattedInsuredName).Titled("Insured Name").Sortable(true);
col.Add(c => c.FormattedAddress).RenderValueAs(m => Html.Raw(m.FormattedAddress)).Encoded(false).Sanitized(false).Titled("Property Address").Sortable(true);
col.Add(c => c.Status).Titled("Status").Sortable(true);
col.Add(c => c.FormattedEffectiveDate).Titled("Effective Date").Sortable(true);
col.Add(c => c.FormattedTotalPremium).Titled("Total Premium").Sortable(true);
col.Add().Encoded(false).SetWidth(150).Sanitized(false).Titled("Action").RenderValueAs(dd => Html.DropDownList("ddlAction", dd.DropDownActions, new { @class = "form-control ddlAction", @data_viewquote = dd.QuoteURL }));
}).WithPaging(25).Sortable(true)
  

На снимке экрана ниже вы можете видеть, что столбец Total Premium сортируется неправильно. Есть снимки экрана как для ASC, так и для DESC.

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Похоже, что вы сортируете их как строки, а не как целые числа; Они сортируются в алфавитном порядке, поэтому 1226 будет предшествовать 223. Вам нужно будет преобразовать их в целое число перед сортировкой. Я прошу прощения за то, что не предоставил точный метод для этого, я не очень хорошо знаком с MVC — просто подумал, что это укажет вам правильное направление.

2. Просто чтобы отметить мой предыдущий комментарий, то же самое касается дат. Вам нужно преобразовать их в соответствующий тип.

3. Ну, это было просто. Столбцы форматировались в строки из их начальных типов. С этим разобрались, и теперь он сортируется правильно. Спасибо за комментарий.

4. Нет проблем, я был сожжен по той же проблеме!

Ответ №1:

Спасибо Санти за комментарий.

Тип для модели форматировался в строку, чтобы показать определенный формат, прежде чем он попадет в сетку. Удалено форматирование строк и перенесено форматирование в сетку, чтобы разрешить сортировку по правильному типу и по-прежнему отображать форматирование. Новая сетка ниже с дополнительной .Форматирование () фрагментов.

 @Html.Grid(Model.SearchResult).Named("searchGrid").Columns(col =>
{
   col.Add(c => c.PolicyNumber).Titled("Number").Sortable(true);
   col.Add(c => c.FormattedInsuredName).Titled("Insured Name").Sortable(true);
   col.Add(c => c.FormattedAddress).RenderValueAs(m => Html.Raw(m.FormattedAddress)).Encoded(false).Sanitized(false).Titled("Property Address").Sortable(true);
   col.Add(c => c.Status).Titled("Status").Sortable(true);
   col.Add(c => c.FormattedEffectiveDate).Titled("Effective Date").Sortable(true).Format("{0:MM/dd/yyyy}");
   col.Add(c => c.FormattedTotalPremium).Titled("Total Premium").Sortable(true).Format("{0:C2}");
   col.Add().Encoded(false).SetWidth(150).Sanitized(false).Titled("Action").RenderValueAs(dd => Html.DropDownList("ddlAction", dd.DropDownActions, new { @class = "form-control ddlAction", @data_viewquote = dd.QuoteURL }));
}).WithPaging(25).Sortable(true)