如何将数据网格devextreme发布到控制器在asp.net mvc

问题描述:

我已经使用devextreme datagrid。我如何发送数据网格控制器在asp.net mvc? 我有我的观点试过这样:如何将数据网格devextreme发布到控制器在asp.net mvc

@using (Html.BeginForm("action-name", "controller-name", FormMethod.Post)) 
      { 
       <div id="frm"></div> 
       <div id="grid"></div> 
       <div class="submit-button" id="submitBtn"></div> 
      } 

,这是我的模型:

public class class-name 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
     public string FName { get; set; } 
     public ContactInfo ContactInfo { get; set; } 
    } 

public class ContactInfo 
    { 
     public string type { get; set; } 
     public string value { get; set; } 
    } 

在我的位指示让我的表单数据(类名),但网格数据(的ContactInfo)是null

+0

您是否在网格中使用编辑?你能提供你的数据网格选项吗?还有一件重要的事情,你使用什么DevExtreme版本? – Sergey

+0

我使用16.2版本。是的,我添加,更新和删除行。但是当我点击按钮时,如何将datagrid中的所有数据发送到我的控制器,就像当我单击提交按钮并将表单数据发送到我的控制器时一样。 – leman17

在你的情况下,你可以使用ASP.NET MVC Wrappers for DevExtreme。在这种情况下,你将能够结合这样的网格的WebAPI控制器:

@(Html.DevExtreme().DataGrid() 
    .DataSource(ds => ds 
     .WebApi() 
     .Controller("GridData") 
     .Key("OrderID") 
     .LoadAction("GetAllOrders") 
     .InsertAction("InsertOrder") 
     .UpdateAction("UpdateOrder") 
     .DeleteAction("RemoveOrder") 
    ) 
) 

而且控制器:

public class DataGridWebApiController : ApiController { 

    [HttpGet] 
    public HttpResponseMessage GetAllOrders(DataSourceLoadOptions loadOptions) { 
     //... 
    } 

    [HttpPost] 
    public HttpResponseMessage InsertOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpPut] 
    public HttpResponseMessage UpdateOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpDelete] 
    public void RemoveOrder(FormDataCollection form) { 
     //... 
    } 
} 

嗯,这是没有必要所有的数据网格的数据发送到服务器侧。只管理更新的数据。

this article中有关于数据绑定的附加信息。

看看this demo以及。

+0

多数民众赞成在伟大的!但我怎么能发布数据(包括我的表单和网格数据)到我的控制器,当我点击提交菜单。我试过onclick方法按钮,并在其中使用Ajax,但我没有成功。 – leman17

+1

为什么要将所有数据网格发布到服务器端?这听起来有点奇怪。您可以使用内置的dxDataGrid功能处理数据更改。我的意思是为CRUD操作实现控制器并启用对数据网格的编辑。就像上面的例子。 – Sergey

+0

leman17希望将更改后的网格数据与其他数据一起保存在其表单中,并以单一表单POST提交。我想知道如何完成这项任务。 – Sven

为我的问题,我找到了我的方式。 这里是解决方案。 https://www.devexpress.com/Support/Center/Question/Details/T489645 感谢devextreme支持。

+0

“您无法查看此票。如果这是您的票,请登录。”最好引用和归纳答案中的文本,以防页面变得无法访问,就像这个文件有问题一样。 –

你可以使用cellTemplate为每一列和cellTemplate你必须使用隐藏输入。例如假设此代码:

factory.Add().DataField("Mobile") 
      .CellTemplate(@<text> 
       <%= text %> 
       <input type='hidden' name='Addresses[<%= rowIndex %>].Mobile' value='<%= value %>' /> 
       </text>); 

text,rowIndex,value是DevExtreme对象。 欲了解更多信息,请检查cellInfo部分链接。 https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/?search=columns

+0

请在链接周围添加一些上下文,复制相关部分并将其粘贴在一起,以防网站内容发生更改或不可用。 – LW001

+0

这仍然是唯一有效的解决方案吗? – Sven

+0

@Sven如果你的网格有一个页面或服务器操作是false,你可以使用getDataSource()来代替。例如:var allGridData = $(“#yourGridId”)。dxDataGrid('instance')。了getDataSource(); –