文档准备好后的数据源 ajax kendo 网格,因为模型未正确绑定在部分视图上
Posted
技术标签:
【中文标题】文档准备好后的数据源 ajax kendo 网格,因为模型未正确绑定在部分视图上【英文标题】:datasource ajax kendo grid after document ready because model not correctly bound on partial view 【发布时间】:2014-10-27 00:40:36 【问题描述】:我遇到了与剑道网格的数据绑定相关的问题。 该网格位于绑定到对象模型的局部视图中。网格还绑定到我的控制器上的刷新操作,如下所示:
@(html.Kendo().Grid<GridModel>()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read
.Action("MyMethod", "MyController")
.Data("getViewModel")
)
)
)
getViewModel 定义如下。它将部分视图的对象模型发送回 MyController 中的 MyMethod
function getViewModel()
return @Html.Raw(JsonConvert.SerializeObject(new myModel=Model));
每次加载局部视图时,网格都会调用 MyController 中的 MyMethod 并传递与局部视图关联的对象模型。这是方法实现
public JsonResult MyMethod([DataSourceRequest] DataSourceRequest request, MyModel myModel)
var result = null;
switch(myModel.MyParameter)
case "1":
result = someMethod();
break;
case "2":
result = someOtherMethod();
break;
return Json(result);
如您所见,发送到网格的结果取决于发送到方法的模型的值。
所以,在我第一次调用局部视图时,对象模型由“getViewModel”读取并发送回 MyMethod。但是我已经实现了一些 AJAX 调用,以便再次调用局部视图,但这次使用不同的对象模型参数。这应该会导致当调用“getViewModel”时,发送到 MyMethod 的模型应该更改为新模型,从而为网格检索不同的数据。
public ActionResult AuxMethod(int id)
var newModel = new MyModel();
return PartialView("_kendoGrid", newModel);
但是我注意到这并没有发生,因为“getViewModel”正在将先前绑定的模型发送到 MyMethod。它进行调用,然后实际更改绑定到剑道网格所在的局部视图的模型。
我已经看到了这一点,因为“getViewModel”在 $(document).ready() 函数之前被调用。在准备好的文档中,我实际上正在获取局部视图模型的新值,但是之前发生了对 MyMethod 的调用并且没有读取正确的值。
我的问题是:
-
有什么方法可以在文档就绪功能之后进行剑道网格的数据源绑定?
或者有什么方法可以在调用数据源方法之前确保新模型已绑定到局部视图?
谢谢!
编辑: 我已经解决了这个问题,答案如下:
-
将 AutoBind(false) 添加到网格中。
在准备好的文档上,从视图中读取模型(以便更新它)并将其分配给变量
读取数据源
相应地定义数据源数据函数
@(Html.Kendo().Grid() .AutoBind(假) .DataSource(dataSource => 数据源 .Ajax() .Read(读取 => 读取 .Action("MyMethod", "MyController") .Data("getViewModel") ) ) )
以下是脚本
var currentModel;
var kendoGrid;
function getViewModel()
return currentModel;
$(document).ready(function ()
currentModel = getModel();
$('#kendoGrid').data('kendoGrid').dataSource.read();
);
function getModel()
return @Html.Raw(JsonConvert.SerializeObject(Model));
【问题讨论】:
我使用完全相同的方法将模型存储在 js 端 aaa 并遇到相同的障碍。在这里节省了我一些时间!谢谢! 【参考方案1】:您永远不会更新传递给视图的模型。您只是将 JSON 结果返回到您的网格,但您的视图仍保留原始模型。这就是 getViewModel() 返回原始模型的原因。
您要做的是创建一个客户端视图模型(可能使用诸如 Knockout 之类的东西或您觉得合适的任何东西)并将其绑定到传递到视图中的模型。这样,当您的视图模型更改时,模型也会更新。
【讨论】:
我实际上是在另一个控制器中更新模型,但我发现在问题中添加这么多代码并不重要。我已经实现了一些 AJAX 调用,它实际上发送了一个新模型。 在 AJAX 调用之后(或期间)如何在另一个控制器中更新模型? 在我的 AJAX 调用期间,我正在调用一个辅助方法 AuxMethod,它呈现局部视图但发送一个新模型,如下所示: public ActionResult AuxMethod(int id) var newModel= new MyModel(); return PartialView("_kendoGrid", newModel);以上是关于文档准备好后的数据源 ajax kendo 网格,因为模型未正确绑定在部分视图上的主要内容,如果未能解决你的问题,请参考以下文章
带有Auth Header的Kendo网格的Kendo Vue数据源
如何使用 Kendo UI Grid 的 SetDataSource 方法
将 [pageSize] 属性添加到 Kendo 网格后的 ExpressionChangedAfterItHasBeenCheckedError
弹出窗口在 Kendo UI 网格中的工作原理以及如何在 MVC4 的 Kendo UI ajax 网格中将控件带入弹出窗口