加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何将行的模型从Kendo Grid传递到可编辑的模板

发布时间:2020-12-15 19:47:23 所属栏目:asp.Net 来源:网络整理
导读:我有一个Kendo Grid,它有一个弹出式可编辑模板, 如果可能,我想将模型(行的模型,或至少其Id)传递给可编辑模板 格 @(Html.Kendo().GridClient() .Name("grid") .Columns(columns = { columns.Bound(c = c.Name).Width(140); columns.Bound(c = c.Status); colu
我有一个Kendo Grid,它有一个弹出式可编辑模板,
如果可能,我想将模型(行的模型,或至少其Id)传递给可编辑模板

@(Html.Kendo().Grid<Client>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.Name).Width(140);
        columns.Bound(c => c.Status);
        columns.Bound(c => c.ProcesingStyle);
        columns.Bound(c => c.ArchiveDays);
        columns.Command(command =>
        {
            command.Edit().Text(" ");
            command.Destroy().Text(" "); ;
        }).Width(90);

    })
     .ToolBar(toolbar => toolbar.Create().Text("New"))
     .Editable(editable => editable
        .Mode(GridEditMode.PopUp)
        .TemplateName("Client").AdditionalViewData(new { Client = Model })
        .Window(w => w.Title("Site")))
    .HtmlAttributes(new { style = "height: 380px;" })
    .Scrollable()
    .Sortable()
    .Selectable()
    .Resizable(resize => resize.Columns(true))
    .Reorderable(reorder => reorder.Columns(true))
    .Events(events => events.Change("onChange"))
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(5))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Get","Clients"))
        .Model(model => model.Id(p => p.Id))
                .Create(update => update.Action("Create","Clients"))
                .Update(update => update.Action("Update","Clients"))
                .Destroy(update => update.Action("Destroy","Clients"))
    )
)

模板

@model Client
@(Html.Kendo().ComboBoxFor(m => m.Plan)
    .DataTextField("Name")
    .DataValueField("Id")
    .Placeholder("Select Plan...")
    .HtmlAttributes(new { style = "width:300px" })
    .Filter(FilterType.Contains)
    .MinLength(3)
    .DataSource(source => 
        source.Read(read => 
            read.Action("GetPlans","Plans",new {ClientId = Model.Id}))))

一切正常,除了我需要使用模板内的行/模型的Id,特别是,我需要将模型.Id(行的模型的id)传递给Combobox上的动作在模板中,所以我可以正确过滤数据

这是网格中的违规行,

.TemplateName("Client").AdditionalViewData(new { Client = Model })

结果是模板内的模型总是为null,我不知道如何将我需要的数据传递给模板

无论如何我能做到这一点,还是我应该看一个不同的方法?

解决方法

我解决这个问题的方法是在原始视图中放置一个javascript函数,如下所示
function getClientId() {
    var row = $(event.srcElement).closest("tr");
    var grid = $(event.srcElement).closest("[data-role=grid]").data("kendoGrid");
    var dataItem = grid.dataItem(row);  
    if (dataItem)
        return { clientId: dataItem.Id }
    else
        return { clientId: null }
    }

并从我的编辑器模板中引用它

.DataSource(source => source.Read(read => read.Action("GetPlans","Plans").Data("getClientId"))))

注意:我很确定你不能从EditorTemplate运行javascript,所以它需要被放在原始视图中

如果其他人可以更好地回答这个问题,或者有不同的答案,那么就会相应地标记你的答

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读