Telerik MVC grid, не в состоянии сделать выпадающий список при редактировании Ajax - PullRequest
0 голосов
/ 22 января 2012

Я пытаюсь реализовать сетку Telerik MVC с помощью Ajax Editing.По сути, это класс групп, и каждая группа принадлежит организации, и мне нужно показать в режиме редактирования раскрывающийся список с возможными организациями на выбор.

Я следовал инструкциям и этому форуму, ноЯ не могу заставить его работать.

Это мой код:

Модель:

Partial Public Class hdmtGROUP

    <ScaffoldColumn(False)>
    Public Property gID As Integer

    Public Property gORG As Integer

    'Dropdownlist.
    <UIHint("_OrgDropDownListPartial"), Required()>
    Public Property Organisation As String

    <DisplayName("Name")>
    <Required(ErrorMessage:="A {0} is required.")>
    <StringLength(120, ErrorMessage:="{0} is too long.")>
    Public Property gNAME As String

    <DisplayName("Description")>
    <Required(ErrorMessage:="A {0} is required.")>
    <StringLength(2000, ErrorMessage:="{0} is too long.")>
    Public Property gDESC As String

    Private _hdmtORG As hdmtORG
    Public Overridable Property hdmtORG As hdmtORG
        Friend Get
            Return _hdmtORG
        End Get
        Set(ByVal value As hdmtORG)
            _hdmtORG = value
        End Set
    End Property

End Class

Partial Public Class Organisation
    Public Id As Integer
    Public Name As String
End Class

Мой контроллер:

    Public Class GroupController
    Inherits System.Web.Mvc.Controller

    Private unitOfWork As UnitOfWork = New UnitOfWork()

    Function Index() As ViewResult
        PopulateOrgsDropDownList()
        Return View(Me.unitOfWork.GroupRepository.Get())
    End Function

    <GridAction()>
    Public Function AjaxSelect() As ActionResult
        Return View(New GridModel(Me.unitOfWork.GroupRepository.Get()))
    End Function

    Private Sub PopulateOrgsDropDownList(Optional selectedOrg As Object = Nothing)
        ViewData("orgs") = Me.unitOfWork.OrgRepository.Get() _
                            .Select(Function(o) New With {.Id = o.orgID, .Name   =o.orgNAME}) _
                            .OrderBy(Function(o) o.Name)
    End Sub

Мой взгляд:

'declare the grid and enable features
Dim grid = Html.Telerik().Grid(Model) _
                    .Name("Grid") _
                    .DataKeys(Function(k) k.Add(Function(g) g.gID)) _
                    .Pageable() _
                    .Sortable() _
                    .Filterable() _
                    .ToolBar(Function(t) t.Insert()) _
                    .DataBinding(Function(dataBind) dataBind.Ajax() _
                                    .Select("AjaxSelect", "Group") _
                                    .Insert("Create", "Group") _
                                    .Update("Edit", "Group") _
                                    .Delete("Delete", "Group"))
'Add grid columns
grid.Columns(Function(columns) columns.Bound(Function(g) g.gNAME).Width(200))
grid.Columns(Function(columns) columns.Bound(Function(g) g.gDESC).Width(200))
grid.Columns(Function(columns) columns.Bound(Function(g) g.Organisation).Width(200))
grid.Columns(Function(columns) columns.Command(Function(s) {s.Edit().ButtonType(GridButtonType.BareImage), s.Delete.ButtonType(GridButtonType.BareImage)}).Width(65))
'Render the grid
grid.Render()  
function onEdit(e) {
    $(e.form).find('#Organisation').data('tDropDownList').select(function (dataItem) {
        return dataItem.Text == e.dataItem['Organisation'];
    });
}

И частичное представление:

@imports System.Collections
@imports Telerik.Web.Mvc.UI
@(Html.Telerik().DropDownList() _
      .Name("Organisation") _
      .BindTo(New SelectList(DirectCast(ViewData("orgs"), IEnumerable), "Id", "Name")))
@

Буду признателен за любую помощь.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Я понимаю, о чем вы говорите, но мне кажется, я что-то упускаю.

Класс организации, который мне нужно загрузить в столбец, таков:

Partial Public Class hdmtORG

    Public Property orgID As Integer
    Public Property orgNAME As String

    Private _hdmtGROUPs As ICollection(Of hdmtGROUP) = New HashSet(Of hdmtGROUP)
    Public Overridable Property hdmtGROUPs As ICollection(Of hdmtGROUP)
        Friend Get
            Return _hdmtGROUPs
        End Get
        Set(ByVal value As ICollection(Of hdmtGROUP))
            _hdmtGROUPs = value
        End Set
    End Property

End Class

Я следую этому примеру с хранилищем единиц работы и универсального хранилища для моей модели:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

Суть в том, что я понимаю, что неправильно загружаю свои организации (hdmtORG), чтобы показать их в столбце сетки моих групп (hdmtGROUP). Мне пришлось сделать приватным свое свойство hdmtORG в hdmtGROUP, чтобы избежать ошибки циклической ссылки. Когда я делаю запрос, если я добавляю параметр «включая hdmtORG», в мою модель загружаются ORG, я вижу его в представлении Model (0) .hdmtORG.orgNAME. Но нет возможности показать их на сетке. Колонны. Когда я пытаюсь что-то вроде этого

grid.Columns(Function(columns) columns.Bound(Function(g) g.hdmtORG.orgNAME))

Я не могу получить доступ, потому что GET hdmtORG недоступен и запрашивает строковое значение.

0 голосов
/ 22 января 2012

Вы ошиблись, создав _OrgDropDownListPartial как частичное представление.Вы должны поместить все свои атрибуты UiHint в папку Views \ Shared \ EditorTemplates .

В вашем случае вы должны переместить все ваши коды частичного представления _OrgDropDownListPartial в Views \ Shared \ EditorTemplates_OrgDropDownListPartial.ascxфайл

...