1

同じコントローラーからロードされた同じ部分ビュー内に複数の剣道グリッドをロードしようとしています。表示されるグリッドの数は動的で、ユーザーの選択によって異なります。

問題は、HTML ページ内のグリッドのすべてのインスタンスが、最後にロードされたグリッドに対応する同じデータセットを表示していることです。これは、グリッドがすべて同じ名前を持っているためだと思います。

  @(Html.Kendo().Grid<RegistrationManagement.Models.Member>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.LastName);
        columns.Bound(p => p.FirstName);
        columns.ForeignKey(p => p.MemberStatusID,
                      (System.Collections.IEnumerable)ViewData["status"], "Value", "Text");
        columns.Bound(p => p.RegistrationYear);
        columns.Bound(p => p.StreetAddress1);
        columns.Bound(p => p.StreetAddress2);
        columns.Bound(p => p.State);
        columns.Bound(p => p.ZipCode);
        columns.Bound(p => p.Email);
        columns.Bound(p => p.PhoneNumber);
        columns.Command(command => { command.Custom("Edit2").Click("CustomEdit");
              command.Edit(); command.Destroy(); }).Width(160);
    })
            .ToolBar(toolbar => toolbar.Create())
        //    .Editable(editable => editable.Mode(GridEditMode.InCell))
    .Editable()
    .Groupable()
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Batch(true)
        .ServerOperation(true)
        .Events(events => events.Error("error_handler"))
        .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.MemberStatus).Editable(false);
            })
        .Read(read => read.Action("Grid_Member_Read", "Member", new { ClubID = @ViewBag.ClubID }))
        .Create(update => update.Action("Grid_Member_Create", "Member", new { ClubID = @ViewBag.ClubID }))
        .Update(update => update.Action("Grid_Member_Update", "Member"))
        .Destroy(update => update.Action("Grid_Member_Destroy", "Member"))
     )
)

したがって、これは 2 つの問題のうちの 1 つです。構造的に何かが間違っていて、AJAX を使用して同じ MVC コントローラーから複数のグリッドに個別のデータセットを設定できないか (不明)、またはグリッドに一意の名前を付ける必要があります。うまくいけば、ViewBag 変数に基づいてグリッドに動的に名前を付けることによって、2 番目のパスを取りたいと思います。私はこれを試しました:

.Name(Html.ViewBag.ID)

コントローラーで設定しましたが、それを実行すると、IEから次のように通知されます。

Compiler Error Message: CS1977: Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type

Source Error:
Line 3:  @(Html.Kendo().Grid<RegistrationManagement.Models.Member>()
Line 4:      .Name(Html.ViewBag.PrettyID)
Line 5:      .Columns(columns =>
Line 6:      {
Line 7:          columns.Bound(p => p.LastName);

これは、Html.ViewBag.PrettyID が解析されていないためだと思います。各剣道グリッドに固有の名前を作成するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

文字列にキャストしてみてください:

.Name((String)Html.ViewBag.PrettyID)

実際の値を気にしない場合は、次を使用できますGuid.NewGuid()

.Name("grid" + Guid.NewGuid().ToString())
于 2013-09-05T19:11:12.117 に答える