【问题标题】:Submit Kendo Grid with Form使用表格提交剑道网格
【发布时间】:2014-03-19 07:20:57
【问题描述】:

我要提交包含以下内容的表单:

  1. 文本框和其他编辑器等表单元素。
  2. 剑道网格其中 是可编辑的。

如下图所示:

我的视图代码是:

@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 的值。

如何发送所有值?

【问题讨论】:

  • 如果没有来自网格实例化、模型和控制器的代码,很难判断,但请查看 this example
  • @AndreiV 您给出的链接示例不起作用。我已经用关于视图的更多详细信息编辑了问题。

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


【解决方案1】:

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

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

【讨论】:

  • 看看问题上的 cmets。
  • “它不起作用”是什么意思我看到您没有为这些隐藏字段指定任何名称属性。我想客户根本没有提交任何东西,因为这些名称和属性都丢失了。仔细查看演示
  • 按照你的建议看一下我编辑的代码,这也行不通。
  • 提交给服务器的内容,给出网络流量,更具体地说是表单数据
【解决方案2】:

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

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

Post Kendo Grid data to Controller in MVC

【讨论】:

【解决方案3】:

你不能访问模型而不是找到剑道网格吗?

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

【讨论】:

  • 我想提交Form里面的Grid,不想请求在Kendo Grid上做AJAX操作。
  • 如何将模型访问到控制器中?这可能吗?
【解决方案4】:

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

这里是渲染的 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] 等空白。您不需要这样做额外的逻辑以确保值是连续的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多