我能够使用像这样的模式向 Kendo 网格的 AJAX 读取操作发送额外的数据......
@(Html.Kendo().Grid<ModelClass>()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("Read", "Controller").Data("getAdditionalData"))
function getAdditionalData() {
return {
AdditionalData: 'data'
};
}
public ActionResult Read([DataSourceRequest] DataSourceRequest request, String additionalData)
{
}
...但是如何向 Create 操作发送额外的数据?在我的场景中,创建需要用户未输入的信息,但在视图中和作为 getAdditionalData() 的返回值都可用。我试过使用以下方法传递它,但操作方法没有接收到它。
.Create(create => create.Action("Create", "Controller").Data("getAdditionalData"))
public ActionResult Create([DataSourceRequest] DataSourceRequest request, ModelClass model, String additionalData)
这是怎么做到的?或者如何将其他数据传递给 AJAX 创建操作?
参考文档:
解决方案更新:
碰巧的是,网格的视图模型(例如“ModelClass”)和客户端数据模型之间不能有字段名称(例如“additionalData”)重复。当我清理要发布的代码时,这在问题中并不明显。不确定这是否发生在 javascript、MVC 或 Telerik 层。
解决方案是将客户端数据模型的字段名称更改为与网格视图模型中的字段名称不同。
更新另一个解决方案:
另一个选项是在网格的视图模型中设置字段的默认值以创建操作,如下所示:
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => {
model.Field(x => x.Id) // Set default value for grid model field
.DefaultValue(Model.DefaultId); // as provided by controller in view model.
})
我有同样的问题,我找到了解决它的方法。
public ActionResult Create([DataSourceRequest] DataSourceRequest request,
ModelClass model, String additionalData)
在这一行中,将
String
更改为 string
,将 additionalData
更改为 AdditionalData
,与您在 JavaScript 中使用的词相同。
还有一件事——在你的
.Events
的DataSource
子句中,不要把.RequestEnd("getAdditionalData")
放在最后。
通常它会起作用。
希望对您有所帮助!