当控制器 [Telerik] 的方法出现异常时,如何取消从 kendo 网格中删除的项目? [解决了]
How cancel removed item from kendo grid when got exception on method at controller [Telerik]? [SOLVED]
Telerik UI 用于 ASP.NET MVC
我想在 kendo 网格中编辑、删除和添加新值时为 @ViewBag 设置新值,因为句柄在数据库中未成功更改(捕获到一个异常)并刷新 kendo 网格以显示没有编辑、添加或删除项目的旧值。
我的问题是这样的:
Controller
[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());
}
Controller constructor
ViewBag.Flag = "false";
View
@(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"))
)
)
View 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();
}
}
我想在编辑、删除或添加新项目不成功时显示一个 window。
当 throw new Exception()
在 try{}
开始处用于测试 kendo 网格时,仍会从网格中删除项目。我正在尝试 refresh() kendo 捕捉任何异常时的网格。
我搜索了很多地方,但这里找不到任何有用的东西。任何人都可以帮助或有其他方法来做到这一点?
我看到了这个 link:
cancel changes of kendo ui for jquery doc's
但没有为 asp.net mvc 的 telerik ui 找到类似的东西。
当控制器捕获异常时触发事件。网格错误,我可以显示弹出窗口 window 并在那里刷新网格。
=>解决方案:
Controller
[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());
}
View
@(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 仅处理 try/catch 上的 catch 错误,并仅针对这些异常错误打开此 window。在控制器上,我有另一个控制器,用于为我们处理的所有异常生成消息模式,一个用于不处理异常的默认消息,以及用于跟踪所有处理和不处理异常的逻辑。处理所有异常。这些错误与 HelpDesk 的其他项目相关联。
非常感谢所有尝试帮助。
Telerik UI 用于 ASP.NET MVC
我想在 kendo 网格中编辑、删除和添加新值时为 @ViewBag 设置新值,因为句柄在数据库中未成功更改(捕获到一个异常)并刷新 kendo 网格以显示没有编辑、添加或删除项目的旧值。
我的问题是这样的:
Controller
[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());
}
Controller constructor
ViewBag.Flag = "false";
View
@(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"))
)
)
View 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();
}
}
我想在编辑、删除或添加新项目不成功时显示一个 window。
当 throw new Exception()
在 try{}
开始处用于测试 kendo 网格时,仍会从网格中删除项目。我正在尝试 refresh() kendo 捕捉任何异常时的网格。
我搜索了很多地方,但这里找不到任何有用的东西。任何人都可以帮助或有其他方法来做到这一点?
我看到了这个 link: cancel changes of kendo ui for jquery doc's
但没有为 asp.net mvc 的 telerik ui 找到类似的东西。
当控制器捕获异常时触发事件。网格错误,我可以显示弹出窗口 window 并在那里刷新网格。
=>解决方案:
Controller
[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());
}
View
@(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 仅处理 try/catch 上的 catch 错误,并仅针对这些异常错误打开此 window。在控制器上,我有另一个控制器,用于为我们处理的所有异常生成消息模式,一个用于不处理异常的默认消息,以及用于跟踪所有处理和不处理异常的逻辑。处理所有异常。这些错误与 HelpDesk 的其他项目相关联。
非常感谢所有尝试帮助。