Кендо Грид не может заполнить вид

1

Я пытаюсь заполнить сетку kendo ui данными из моей базы данных. Я не могу найти ответ со всеми другими сообщениями с той же проблемой. пользователь выполняет поиск с использованием UserId и To/From Dates. используя точки останова, я могу видеть данные, возвращаемые через контроллер. первый раз, используя кендо, поэтому, если мне нужно разместить дополнительную информацию, пожалуйста, дайте мне знать

Сообщение об ошибке

Compiler Error Message: CS1660: Cannot convert lambda expression to type 'string' because it is not a delegate type

Source Error:

Line 11:     .Columns(columns =>
Line 12:     {
Line 13:         columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
Line 14:         columns.Bound(m => m.Assignment);
Line 15:         columns.Bound(m => m.Action);

контроллер

[HttpPost]
public ActionResult ReportsPhoneSupport(ReportsPhoneSupport model)
{       
    string[] userIds = model.UserId.Split(',');

    foreach (string userId in userIds)
    {
        int iUserId = 0;
        if (Int32.TryParse(userId, out iUserId))
        {
            ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView();
            RetrievalProcedures.FetchReportPhoneSupportResultTypedView(results, model.FromDate, model.ToDate, iUserId);
        }
    }

    return View(model);
}

Посмотреть

@{
    ViewBag.Title = "ReportsPhoneSupport";
 }

<h2>ReportsPhoneSupport</h2>

@(Html.Kendo().Grid<UtilityWebSite.Controllers.ReportsPhoneSupportController>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
        columns.Bound(m => m.Assignment);
        columns.Bound(m => m.Action);
        columns.Bound(m => m.ToFrom);
        columns.Bound(m => m.Result);
        columns.Bound(m => m.Description);
    })
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .HtmlAttributes(new { style = "height:430px;" })
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Read(read => read.Action("ReportsPhoneSupport", "ReportsPhoneSupport"))
    )
)

КЛАСС

 public class ReportsPhoneSupport
{
    public string UserId { get; set; }
    public DateTime ToDate { get; set; }
    public DateTime FromDate { get; set; }

}

} Изображение 174551

  • 0
    Опубликовал ответ, но он расширится, если вы сможете дать мне немного информации о вашем классе модели и о том, что вы хотите, чтобы происходило при чтении, как при фильтрации на сервере, при передаче фильтров, которые находятся за пределами таблицы и т. Д.
  • 0
    результат поиска приносит 2 результата. 1 для каждого идентификатора пользователя
Показать ещё 1 комментарий
Теги:
asp.net-mvc
lambda
kendo-grid

1 ответ

1
Лучший ответ

Ну, вам нужно вернуть Json в сетку, а не на просмотр.

Так что-то вроде

Public jsonresult readData([DataSourceRequest] DataSourceRequest request, MyModel model)
{
 Do something here to get data for source
 Eg List<MyReturnedModel> returnModel = new List<MyReturnedModel>()
 { new MyReturnedModel(){ id = 1}, (etc)
  };

Return json(returnedModel.ToDataSourceResult(request,ModelState), jsonbehaviour.Get);
}

Надеюсь, это даст вам достаточно идеи для работы.

Редактировать:

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

второе редактирование:

ok, поэтому, если у меня это право, фактические данные, отображаемые в сетке, должны быть типа ReportPhoneSupportResultTypedView

поэтому, если вы сначала смените сетку на это:

@(Html.Kendo().Grid<**ReportPhoneSupportResultTypedView**>()
 (include any namespaces here for the model type to be referenced correctly.)
 .Name("grid")
.Columns(columns =>
{
    columns.Bound(m => m.ActivityDate).Format("{0:MM/dd/yyyy}");
    columns.Bound(m => m.Assignment);
    columns.Bound(m => m.Action);
    columns.Bound(m => m.ToFrom);
    columns.Bound(m => m.Result);
    columns.Bound(m => m.Description);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .ServerOperations(true)
   .Read(read => read.Action("ReportsPhoneSupport", "ReportsPhoneSupport").Data("MyFilters"))
)

)

Вы заметите, что я добавил данные. После вашего действия чтения и с помощью javascript вы можете добавить параметры поиска

так что-то вроде этого:

<script>
function MyFilters()
{
     return { filterModel: {   
                               UserId: 1,
                               ToDate: "01 Jan 2014",
                               FromDate: "20 Jan 2014"
                            }
            };
}
</script>

Затем необходимо создать объект модели, который вы передаете, чтобы выполнить фильтрацию, а затем изменить действие чтения на что-то вроде этого:

Примечание. Убедитесь, что вы включили пространство имен Kendo.Mvc.Extensions и Kendo.Mvc.UI в контроллер для правильного выбора DataSourceRequest/toDataSourceResult.

public JsonResult ReportsPhoneSupport([DataSourceRequest] DataSourceRequest request,ReportsPhoneSupport filterModel )
{       
   string[] userIds = filterModel.UserId.Split(',');

foreach (string userId in userIds)
{
    int iUserId = 0;
    if (Int32.TryParse(userId, out iUserId))
    {
        ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView();
        RetrievalProcedures.FetchReportPhoneSupportResultTypedView(results, filterModel.FromDate, filterModel.ToDate, iUserId);
    }
}
  **I am assuming your results set is some form of enumerable/IList**
return Json( results.toDataSourceResult(request,ModelState), jsonbehaviour.AllowGet);

}

Надеюсь, этот расширенный пример даст вам ответ, который вы ищете.

  • 0
    это большая помощь! спасибо. Однако я получаю это сообщение о возвращении Json (results.toDataSourceResult (request, ModelState), JsonRequestBehavior.AllowGet); Имя «результаты» не существует в текущем контексте
  • 0
    инициализация результатов должна быть настроена вне цикла foreach, и тогда это должно работать. так что просто первая строка ReportPhoneSupportResultTypedView results = new ReportPhoneSupportResultTypedView (); вне цикла foreach.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню