我使用了devextreme的datagrid。 如何将数据网格发送到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)为空
答案 0 :(得分:3)
你可以为每个列使用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
答案 1 :(得分:2)
在您的情况下,您可以使用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。
答案 2 :(得分:0)
对于我的问题,我找到了自己的方式。 这是解决方案。 https://www.devexpress.com/Support/Center/Question/Details/T489645 感谢devextreme支持。