Я пытаюсь заполнить сетку 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; }
}
}
Ну, вам нужно вернуть 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);
}
Надеюсь, этот расширенный пример даст вам ответ, который вы ищете.