2012-01-21 18 views
0

私はAjax編集でTelerik MVCグリッドを実装しようとしています。基本的にはグループのクラスであり、すべてのグループは組織に属しています。編集モードでは、選択可能な組織とのドロップダウンリストを表示する必要があります。Telerik MVCグリッド、Ajax編集でドロップダウンリストを作成できない

私はチュートリアルとこのフォーラムに従ってきましたが、動作させることはできません。

これは私のコードです:

モデル:

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"))) 
@ 

私は何か助けていただきありがとうございます。

ありがとうございます。

答えて

0

部分ビューとして_OrgDropDownListPartialを作成して間違っていました。すべてのUiHint属性コードは、Views \ Shared \ EditorTemplatesフォルダに配置する必要があります。あなたのケースでは

、あなたが共有\ EditorTemplates_OrgDropDownListPartial.ascxが

+0

こんにちはMahmoud、ありがとう!今は動作しますが、問題は残っています。編集ボタンを押すとドロップダウンリストが表示され、データベースの値が更新されますが、組織の列にフィールドの値を設定することはできません。モデルに部分クラスを作成しましたが、うまくいきません。何が問題なのか分かりますか? (私は最後の試行でコードを更新しました) – Scheveningen

+0

"編集"ボタンを押すと、関連組織がDropDownListで選択しないことを意味しますか?実際に何もする必要はありません! 注意してください! :あなたのコンボボックスが項目のリスト((OrgId、OrganizationName)のようなキーと値のペアを持つ)にバインドされている場合、あなたのモデルはOrganizationNameではなくOrgIdフィールドを保持する必要があります!その後、編集モードに変更すると、ドロップレットDropDownListが自動的に関連項目を選択します。 –

+0

グリッドを読み込むと、Organizationに関する列に情報が表示されません。編集ボタンを押すと、ドロップダウンリストが表示されますが、関連する組織には表示されません。ドロップダウンリストにのみ表示されます。私が前に言ったように、Public Property Organization As Stringを追加し、それをIdとName(モデルを参照)の部分クラスにしましたが、まだ動作しません。 – Scheveningen

0

ファイル\ビューにすべてのあなたの_OrgDropDownListPartial部分ビューのコードを移動する必要があります私はあなたが何を言ってるのか理解が、私は、私は何かが欠けてると思います。私は列にロードする必要が

組織クラスはこれです:

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

ポイントは、私のグループ(hdmtGROUP)のグリッド列に表示するために自分の組織(hdmtORG)を正しくロードしていないことを理解しています。循環参照エラーを避けるために、hdmtGROUP内の私のプロパティhdmtORGをprivateにしなければなりませんでした。クエリを作成するときに、 "hdmtORGを含む"というパラメータを追加すると、ORGがモデルにロードされ、モデル(0).hdmtORG.orgNAMEとして表示されます。しかし、それらをグリッド上に表示する方法はありません。列。私はこの

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

ような何かをしようとするとhdmtORGのGETがづけしていないと、それは文字列値のために私に尋ねたので、私はアクセスすることはできません。