gpt4 book ai didi

asp.net-mvc - 使用 Kendo MVC Grid 和其他元素提交表单

转载 作者:行者123 更新时间:2023-12-03 18:33:42 24 4
gpt4 key购买 nike

我正在尝试获取一个包含 Kendo MVC 网格和其他要提交的元素的表单。

  • View 模型包含三个字符串字段和一个 IEnumerable收藏。
  • 网格是服务器绑定(bind)的。我没有使用网格添加任何元素或从列表中删除任何元素,但网格包含映射到列表项中的 bool 列的复选框。

  • 每当我提交此表单时,三个字符串元素都会在 post 方法中返回,但列表始终为空。

    这是数据模型:
    public class Parent
    {
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Comments { get; set; }
    public IEnumerable<ChildItems> Children { get; set; }
    }

    public class ChildItems
    {
    public string ChildField1 { get; set; }
    public string ChildField2 { get; set; }
    public boolean Include { get; set; }
    }

    这是我的看法:
    @{
    ViewBag.Title = "Index";
    }
    @model GridInForm.Models.Parent

    @using(Html.BeginForm("Save", "Home"))
    {
    <fieldset>
    <legend>Editing Parent</legend>

    @Html.LabelFor(parent => parent.Field1)
    @Html.EditorFor(parent => parent.Field1)

    @Html.LabelFor(parent => parent.Field2)
    @Html.EditorFor(parent => parent.Field2)
    @Html.LabelFor(parent => parent.Comments)
    @Html.EditorFor(parent => parent.Comments)
    @(Html.Kendo().Grid(Model.Children)
    .Name("Children")
    .ToolBar(tools => tools.Create().Text("Add new Children"))
    .Editable(editable => editable.Mode(GridEditMode.PopUp).CreateAt(GridInsertRowPosition.Bottom))
    .Columns(columns =>
    {
    columns.Bound(p => p.ChildField1).ClientTemplate("#= ChildField1 #" +
    "<input type='hidden' name='ChildField1[#= index(data)#].ChildField1' value='#= Name #' />"
    );

    columns.Bound(p => p.ChildField2).Hidden().ClientTemplate("#= ChildField1 #" +
    "<input type='hidden' name='ChildField1[#= index(data)#].ChildField1' value='#= ChildField1 #' />"
    );

    columns.Command(command =>
    {
    // command.Destroy();
    command.Edit();
    }).Width(100);
    })
    .DataSource(dataSource => dataSource
    .Server()
    .Create("Create", "Home")
    .Read("Index", "Home")
    .Update("Update", "Home")
    .Model(model =>
    {
    model.Id(p => p.ChildField1);
    model.Field(p => p.ChildField1).Editable(false);
    })
    //.ServerOperation(true)
    )
    )
    </fieldset>

    <input type="submit" value="Save" />
    }

    <script>
    function index(dataItem) {
    alert("bindind");
    var data = $("#Products").data("kendoGrid").dataSource.data();
    return data.indexOf(dataItem);
    }
    </script>

    当我提交表单时,我将父项返回到 View 模型中,但 IEnumerable网格中的字段始终为空。

    这不是这样做的方法吗,如果是这样,完成这样的事情的方法是什么?我在以前的 Telerik 版本上遇到过这个问题,我发现在 Kendo UI 上也是如此。任何方向将不胜感激。这是一个长期存在的问题。

    最佳答案

    我有这个场景在我的项目中完美运行。这是我的网格声明...

    @(Html.Kendo().Grid(Model.ChildLines)
    .Name("RequestLinesGrid")
    .Editable(editable => editable.Mode(Kendo.Mvc.UI.GridEditMode.InCell))
    .Columns(columns =>
    {
    columns.Bound(p => p.ItemCode).ClientTemplate("#= ItemCode #" +
    "<input type='hidden' name='MyLines[#= index(data)#].ItemCode' value='#= ItemCode #' />"
    );
    columns.Bound(p => p.Description).ClientTemplate("#= Description #" +
    "<input type='hidden' name='MyLines[#= index(data)#].Description' value='#= Description #' />"
    );
    columns.Bound(p => p.UoM).ClientTemplate("#= UoM #" +
    "<input type='hidden' name='MyLines[#= index(data)#].UoM' value='#= UoM #' />"
    );
    columns.Bound(p => p.QtyCC).ClientTemplate("#= QtyCC #" +
    "<input type='hidden' name='MyLines[#= index(data)#].QtyCC' value='#= QtyCC #' />"
    );
    columns.Bound(p => p.QtyEmployee).ClientTemplate("#= QtyEmployee #" +
    "<input type='hidden' name='MyLines[#= index(data)#].QtyEmployee' value='#= QtyEmployee #' />"
    );
    columns.Bound(p => p.ItemListLineID).Hidden(true).ClientTemplate("#= ItemListLineID #" +
    "<input type='hidden' name='MyLines[#= index(data)#].ItemListLineID' value='#= ItemListLineID #' />"
    );
    columns.Bound(p => p.ItemListCode).Hidden(true).ClientTemplate("#= ItemListCode #" +
    "<input type='hidden' name='MyLines[#= index(data)#].ItemListCode' value='#= ItemListCode #' />"
    );
    columns.Command(command =>
    {
    command.Destroy();
    }).Width(200);
    })
    .DataSource(dataSource => dataSource.Ajax()
    .Model(m =>
    {
    m.Id(p => p.ItemCode);
    m.Field(p => p.ItemCode).Editable(false);
    m.Field(p => p.Description).Editable(false);
    m.Field(p => p.UoM).Editable(false);
    m.Field(p => p.QtyCC).Editable(true);
    m.Field(p => p.QtyEmployee).Editable(true);
    m.Field(p => p.ItemListLineID).Editable(false);
    m.Field(p => p.ItemListCode).Editable(false);
    })
    .Batch(true)
    .ServerOperation(false)
    // these are dummy action methods that don't really exist.
    .Update("upd", "upd")
    .Destroy("del", "del")
    .Create("cre", "cre")
    )
    .Navigatable()
    )

    这是“索引”功能:
    function index(dataItem) {
    var data = $("#RequestLinesGrid").data("kendoGrid").dataSource.data();

    return data.indexOf(dataItem);
    }

    关于asp.net-mvc - 使用 Kendo MVC Grid 和其他元素提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14555137/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com