Telerik MVC Grid не отображает данные - PullRequest
0 голосов
/ 05 октября 2011

Я использую версию 2011.2.914 элементов управления. Всякий раз, когда я пытаюсь привязать данные из моего контроллера к представлению, я не могу получить данные в коллекции для отображения в сетке . Я получаю сообщение " Нет записей для отображения " из сетки.

Я хочу отметить, что если я не использую сетку Telerik, данные получаются в порядке (см. Ниже): Контроллер без Telerik Grid

IEnumerable<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
                     return View("Index", customerList);

View

@model IEnumerable<YeagerTech.YeagerTechWcfService.Customer>

@{
    ViewBag.Title = "Customer Index";
}
<h2>Customer Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            Email
        </th>
        <th>
            Company
        </th>
        <th>
            FirstName
        </th>
        <th>
            LastName
        </th>
        <th>
            Address1
        </th>
        <th>
            Address2
        </th>
        <th>
            City
        </th>
        <th>
            State
        </th>
        <th>
            Zip
        </th>
        <th>
            HomePhone
        </th>
        <th>
            CellPhone
        </th>
        <th>
            Website
        </th>
        <th>
            IMAddress
        </th>
        <th>
            CreatedDate
        </th>
        <th>
            UpdatedDate
        </th>
        <th>
        </th>
    </tr>
    @if (ViewData.Model != null)
    {
        foreach (var item in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Email)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Company)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Address1)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Address2)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.City)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.State)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Zip)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.HomePhone)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CellPhone)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Website)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.IMAddress)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CreatedDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.UpdatedDate)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.CustomerID }) |
                @Html.ActionLink("Details", "Details", new { id = item.CustomerID })
            </td>
        </tr>
        }
    }
</table>

Я пробовал привязку к ServerSide и Ajax. Оба не работают. Я искал сайт Telerik и сеть и не могу найти то, что отсутствует.

Что мне нужно сделать, чтобы решить эту проблему и получить данные в моей сетке?

Вот код в моем контроллере Customer для привязки Ajax (что я действительно хочу). По возвращении получения данных у меня есть файл изображения, который я сохранил, где данные находятся в коллекции customerList (, в StackOverflow нет возможности прикрепить какие-либо файлы, поэтому я могу не покажу).

Во время рендеринга View я захватывал данные при отладке нескольких объектов. При циклическом перемещении по сетке во время привязки я записывал данные в другой файл.

Контроллер с использованием Telerik Grid: используя Telerik.Web.Mvc;
Открытый класс CustomerController: контроллер {

[GridAction]
         public ActionResult Index()
         {
                     IEnumerable<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
                     return View(new GridModel<YeagerTechWcfService.Customer>
                     {
                         Data = customerList
                     });

         }
 }

Ниже приведен код в моем связанном представлении. Кстати, все связанные столбцы имеют IntelliSense, которые появляются для столбцов в моей модели. Это для действия Index в контроллере Customer.

@model Telerik.Web.Mvc.GridModel<YeagerTech.YeagerTechWcfService.Customer>
 @{
     ViewBag.Title = "Customer Index";
 }
 <h2>
     Customer Index</h2>
 <p>
     @Html.ActionLink("Create New", "Create")
 </p>
 <table>
     @(Html.Telerik().Grid<YeagerTech.YeagerTechWcfService.Customer>()
   .Name("Customers")
   .Columns(columns =>
 {
     columns.Bound(o => o.Email);
     columns.Bound(o => o.Company);
     columns.Bound(o => o.FirstName);
     columns.Bound(o => o.LastName);
     columns.Bound(o => o.Address1);
     columns.Bound(o => o.Address2);
     columns.Bound(o => o.City);
     columns.Bound(o => o.State);
     columns.Bound(o => o.Zip);
     columns.Bound(o => o.HomePhone);
     columns.Bound(o => o.CellPhone);
     columns.Bound(o => o.Website);
     columns.Bound(o => o.IMAddress);
     columns.Bound(o => o.CreatedDate).Format("{0:MM/dd/yyyy}");
     columns.Bound(o => o.UpdatedDate).Format("{0:MM/dd/yyyy}");
 }).DataBinding(dataBinding => dataBinding.Ajax().Select("Index", "Customer"))
 .Pageable()
 .Sortable()
 .Scrollable()
 .Resizable(resizing => resizing.Columns(true))
 .Filterable())
 </table>

1 Ответ

2 голосов
/ 05 октября 2011

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

Попробуйте выполнить инициализацию вашей сетки, когда строится ваш View View.Обратите внимание на Model.Data , который я использую в конструкторе Grid:

@(Html.Telerik().Grid<YeagerTech.YeagerTechWcfService.Customer>(Model.Data)
   .Name("Customers")
   .Columns(columns =>
   {
       columns.Bound(o => o.Email);
       columns.Bound(o => o.Company);
       ...
   }))

Если это сработает, вам следует попытаться создать другой метод Action с другим именем.В своих проектах я делаю это:

[GridAction]
public ActionResult GetYeagerTechGridData()
{
    IEnumerable<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
    return View(new GridModel<YeagerTechWcfService.Customer>
    {
        Data = customerList
    });
}

и использую вашу сетку таким образом:

@(Html.Telerik().Grid<YeagerTech.YeagerTechWcfService.Customer>()
   .Name("Customers")
   .Columns(columns =>
   {
       columns.Bound(o => o.Email);
       columns.Bound(o => o.Company);
       ...
   })
   .DataBinding(dataBinding => dataBinding.Ajax().Select("GetYeagerTechGridData", "Customer")))
...