使用表单提交Kendo Grid

时间:2014-03-19 07:20:57

标签: javascript jquery html asp.net-mvc kendo-ui

我想提交包含以下内容的表格:

  1. 表单元素,如文本框和&其他编辑。
  2. Kendo Grid哪个 是可编辑的。
  3. 如下图所示: Form with Kendo Grid

    我的观点代码是:

    @model ProjectName.ReferenceViewModel
    @using (Html.BeginForm("MainDocumentSave", "Document", FormMethod.Post, new { @class="MainForm"}))
    {
        <input type="text" name="ParentReferenceID" id="ParentReferenceID" value="@Model.ID"/>
    
        <input type="text" name="ParentReferenceName" id="ParentReferenceName" value="@Model.Name"/>
    
    
    
     @(Html.Kendo().Grid<Invoice.Models.ViewModels.ReferenceViewModel>()
                    .Name("Reference")
                    //.TableHtmlAttributes(new { style = "height:160px; " })
                    .Columns(columns =>
                    {
                        columns.Bound(p => p.ReferenceID).Hidden(true).ClientTemplate("#= ReferenceID#" + "<input type='hidden' class='ReferenceID' name='Reference[#= index(data)#].ReferenceID' value='#=ReferenceID#' />");
                        columns.Bound(p => p.ReferenceName).HeaderHtmlAttributes(new { title = "Reference Name" }).Title("Reference").Width(10).ClientTemplate("#= ReferenceName#" + "<input type='hidden' class='ReferenceName'name='Reference[#= index(data)#].ReferenceName' value='#=ReferenceName#' />");
                        columns.Bound(p => p.ReferenceDescription).HeaderHtmlAttributes(new { title = "Reference Description" }).Title("Description").Width(10).ClientTemplate("#= ReferenceDescription#" + "<input type='hidden' class='ReferenceDescription' value='#=ReferenceDescription#' />");
                        //columns.Bound(p => p.DefaultReferenceValue).Title("Value").Width(15).EditorTemplateName("ReferenceValidValue").HtmlAttributes(new { @class = "DefaultValue" }).ClientTemplate("#= DefaultReferenceValue#" + "<input type='hidden' class='DefaultReferenceValue' value='#=DefaultReferenceValue#' />");
    
    
                    })
                    .Editable(ed => ed.Mode(GridEditMode.InCell))
                    .Navigatable()
                    .HtmlAttributes(new { style="height:190px;"})
                    .DataSource(dataSource => dataSource
                        .Ajax()
                        .Batch(true)
                        .ServerOperation(false)
                    )
                    )
    
    }
    

    这里的问题是,在提交表单时,我只能发布编辑器的值,而不能发布Kendo Grid的值。

    如何发送所有值?

4 个答案:

答案 0 :(得分:2)

请在以下链接中查看我的回答

如何将网格值发布到控制器操作。

Post Kendo Grid data to Controller in MVC

此致

Shaz

答案 1 :(得分:2)

如何在this代码库文章中演示和解释如何提交Kendo Grid模型以及表单。

基本上这个想法是,对于每一列,您必须指定一个模板,该模板具有保存该项的值的隐藏输入。

答案 2 :(得分:1)

你不能访问Model而不是找到Kendo网格吗?

尝试在控制器中获取Invoice.Models.ViewModels.ReferenceViewModel,因为您已绑定到Kendo Grid。

答案 3 :(得分:1)

发布集合(例如表格中的行)时,输入的每个名称都需要在名称后附加数组元素。

以下是呈现两个人阵列的呈现HTML:

<form action="/Document/MainDocumentSave">
  <table>
    <tr>
      <input name="person.PersonID[0]" type="hidden">1</input>
      <input name="person.FirstName[0]" type="text">Bill</input>
    </tr>
    <tr>
      <input name="person.PersonID[1]" type="hidden">2</input>
      <input name="person.FirstName[1]" type="text">Bob</input>
    </tr>
  </table>
</form>

数组括号中的值必须是唯一的。集合中最简单的“唯一值”是数字:[0],[1],[2]等。

我提到这个的唯一原因是因为当从表中添加/删除行时,你可以得到像[0],[1],[5],[6]等那样的空白。你不需要做额外的逻辑,以确保值是连续的。