当控制器[Telerik]的方法出现异常时,如何取消剑道网格中删除的项目



用于ASP.NET MVC 的Telerik UI

我想在编辑、删除时为@ViewBag设置新值,在剑道网格中为数据库中未成功更改的句柄添加新值(捕捉到一个异常(,并刷新剑道网格以显示未编辑、添加或删除项目的旧值。

我的问题是这样的:

控制器

[HttpPost]
public ActionResult RemoveX(int idX){
Model.typeX removeX = //get object from context with idX
try
{
//removeX get out of db
}
catch(Exception e)
{
ViewBag.Flag = "true"; //"flag to show kendo window in view"
return //tried many returns to new ViewBag value go to my view, nothing working.
}
return Json(ModelState.ToDataSourceResult());
}

控制器构造函数

ViewBag.Flag = "false";

查看

@(Html.Kendo().Grid<Project.Models.ModelX>()
@* many columns and options*@
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events
.Error("errorFunction")
.Change("gridAfterChange"))
.Model(model => {@*some ViewBag from controller*@})
.Create(update => update.Action("MethodController", "Controller"))
.Read(read => read.Action("MethodController", "Controller"))    
.Update(update => update.Action("MethodController", "Controller"))
.Destroy(update => update.Action("RemoveX", "Controller"))
)
)

查看javascript

function gridAfterChange(e) {
if('(@ViewBag.Flag)' == "true")
@ViewBag.Flag= "false";
var grid = $("#gridName").data("kendoGrid");
grid.dataSource.read();
var otherWindow = $("#otherWindow").data("kendoWindow");
otherWindow.open.center();
}
}

我想在编辑、删除或添加新项目失败时显示一个窗口。当测试剑道格的try{}开头的throw new Exception()仍然从格中移除项目时。当捕捉到任何异常时,我正在尝试刷新((剑道网格。

我找了很多地方,但没有找到任何工作。有人可以帮忙或有其他方法来做这件事吗?

我看到了这个链接:取消jquery文档的剑道ui更改

但是在asp.net mvc的telerik ui中没有发现类似的东西。

当控制器捕捉到异常触发事件时。网格错误,我可以在那里显示弹出窗口和刷新网格。

=>解决方案:

控制器

[HttpPost]
public ActionResult RemoveX(int idX){
Model.typeX removeX = //get object from context with idX
try
{
throw new Exception(); //for test
//removeX get out of db
}
catch(Exception ex)
{
ModelState.AddModelError("", ex.Message);
return Json(ModelState.ToDataSourceResult());
}
return Json(ModelState.ToDataSourceResult());
}

查看

@(Html.Kendo().Grid<Project.Models.ModelX>()
@* many columns and options*@
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events
.Error("errorFunction")
)
.Model(model => {@*some ViewBag from controller*@})
.Create(update => update.Action("AddMethodAtController", "Controller"))
.Read(read => read.Action("FillDataSourceMethodAtController", "Controller"))
.Update(update => update.Action("EditMethodAtController", "Controller"))
.Destroy(update => update.Action("RemoveX", "Controller"))
)
)
@(Html.Kendo().Window()
.Name("popupWindow")
.Title("Error")
.Visible(false)
)
<script type="text/javascript">
function errorFunction(e) {
if(e.erros){
var grid = $("#gridName").data("kendoGrid");
grid.dataSource.read();
grid.refresh();
var popupWindow= $("#popupWindow").data("kendoWindow");                
var message = e.errors[""]["errors"][0];
popupWindow.content(message);
popupWindow.open()
popupWindow.center();                
}
}
</script>

原始文件和逻辑非常不同,我以解决方案为例。我有if statmente for只处理try/catch上的catch错误,并只为这些异常错误打开此窗口。在控制器上,我有一个其他控制器,用于为我们注意的所有异常创建消息模式,一个默认消息用于不处理异常,以及用于跟踪所有处理和不处理异常的逻辑。照顾所有的例外。这些错误与帮助台的其他项目有关。

非常感谢您的帮助。

最新更新