JQGrid на ASP.Net MVC с VB.Net - PullRequest
       5

JQGrid на ASP.Net MVC с VB.Net

0 голосов
/ 29 марта 2012

Я пытаюсь сделать JQGrid для простой таблицы.

После перевода с переводом VB из

http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx

от

http://www.qa.downappz.com/questions/jqgrid-sorting-in-vb-net-mvc-app.html

Я изменил его в своей собственной базе данных и предложил эту функцию

Public Function SelectGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult
  Dim context As New IssueDBEntities
  Dim pageIndex As Integer = Convert.ToInt32(page) - 1
  Dim pageSize As Integer = rows
  Dim totalRecords As Integer = context.Issues.Count()
  Dim totalPages As Integer = CInt(Math.Ceiling(CSng(totalRecords) / CSng(pageSize)))

  Dim jsonData = New With { _
    .total = totalPages, _
    .page = page, _
    .records = totalRecords, _
    .rows = (From p In context.Issues _
        Order By (p.ID & " " & sord) _
        Select New With {.id = p.ID, .cell = _
                     {p.ID, p.Image_Path, p.Magazine_Type,p.Magazine_Path}}).ToArray()}

   Return Json(jsonData, JsonRequestBehavior.AllowGet)
End Function

Сетка отображается без данных, и система выдает ошибку

В описании ошибки написано

"Невозможно привести тип System.Int32 к типу System.Object. LINQ to Entities поддерживает только приведение типов примитивов Entity Data Model."

Любая помощь приветствуется, если это связано с каким-то базовым недоразумением, пожалуйста, направьте меня, я готов выполнить некоторую тяжелую работу.

Спасибо

Редактировать: код, который в итоге сработал согласно предложению Олега

Dim Simple_Object As IQueryable(Of Object)
        Dim Second_Simple_Object As IQueryable(Of Object)

        Dim My_Array As Array
        Dim My_Second_Array As Array

        Simple_Object = From p In Context.Issues _
                     Order By (p.ID & " " & sord) _
                Select New With {p.ID, p.Image_Path, p.Magazine_Type, p.Magazine_Path}

        My_Array = Simple_Object.ToArray()

        Second_Simple_Object = From p In Context.Issues _
                     Order By (p.ID & " " & sord) _
                Select New With {p.ID}

        My_Second_Array = Second_Simple_Object.ToArray()

        Dim My_Result(0) As My_Record_Type

        For i = 0 To My_Array.GetLength(0) - 1
            If i > 0 Then
                ReDim Preserve My_Result(i)
            End If

            My_Result(i) = New My_Record_Type

            My_Result(i).id = CInt(My_Second_Array(i).ID)
            My_Result(i).Cell = {My_Array(i).ID.ToString, My_Array(i).Image_Path.ToString, _
                                    My_Array(i).Magazine_Type.ToString, My_Array(i).Magazine_Path.ToString}
        Next

Class My_Record_Type
    Public id As Integer
    Public Cell As String()
End Class

Ответы [ 2 ]

2 голосов
/ 06 апреля 2012

Вот полный пример JQgrid с ASP.NET MVC 3 + C # (вы можете преобразовать его в vb.net) http://www.dotnetacademy.blogspot.in/2012/04/using-jqgrid-in-aspnet-mvc-3.html

2 голосов
/ 29 марта 2012

Вы пытаетесь заполнить rows свойство в один шаг . Проблема в том, что вы используете Entity Framework, у которого есть некоторые ограничения в преобразовании типов данных. Вы можете решить эту проблему, если сначала сделаете запрос, чтобы получить нужные вам элементы без какого-либо преобразования данных и сохранить промежуточные результаты как List элементов. После этого вы можете сделать еще один LINQ Query, где вы включите явное преобразование p.ID в строку. Кроме того, ваш текущий код не использует подкачку данных. Таким образом, пользователь никогда не увидит больше как первую страницу, если вы не используете loadonce: true.

Мне сложно написать правильный код на VB без его отладки. Я использую C # вместо этого с прошлых лет. Я рекомендую вам взглянуть на ответ для получения дополнительной информации. Содержит реализацию фильтрации на стороне сервера. Если вам это не нужно и вы удалите соответствующий код, остальной код будет очень коротким, и я надеюсь, что его будет легко понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...