【发布时间】:2013-10-27 12:06:25
【问题描述】:
我正在创建一个使用 GridView 和 ObjectDataSource 检索数据的 SharePoint WebPart。当连接终止(出于不同原因)时,我想捕获异常并将用户重定向到包含信息的页面。我不知道我的 WebPart 是放在其他 WebPart 中还是直接放在一个页面上。
我通过在绑定到 ObjectDataSource 的类的 Select 方法中抛出异常来模拟错误:
public List<Item> getItems(String param, int maximumRows, int startRowIndex)
{
if (param == "a") throw new Exception("exception");
每当我在代码中调用数据绑定时,我都可以捕获异常(示例):
try
{
gvMain.PageIndex = 0; //gvMian - SPGridView
gvMain.DataBind();
}
catch (Exception ex)
{
Page.Cache["cacheError"] = ex.Message;
SPUtility.Redirect(SPUtility.GetPageUrlPath(HttpContext.Current) + "?wnd=err", SPRedirectFlags.Trusted, HttpContext.Current);
}
但有时页面无法捕获异常(可能是自动调用数据绑定)并显示带有堆栈跟踪的服务器错误:
[Exception: exception]
MyProject.odsClass.getItems(String param, Int32 maximumRows, Int32 startRowIndex) +211
[TargetInvocationException: Obiekt docelowy wywołania zgłosił wyjątek.]
System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +1255
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +38
System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance) +897
System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1848
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +27
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +261
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +46
System.Web.UI.Control.PreRenderRecursiveInternal() +108
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Control.PreRenderRecursiveInternal() +224
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3394
On this MSDN page我找到了一张不错的图片,它建议在 WebPart 边界上捕获这种异常,但他们提供的示例对我来说并不清楚(这个边界在我的 WebPart 代码中的什么位置?)
我将不胜感激有关如何捕获此类异常、如何在我的代码中处理它或有关如何以任何其他方式处理此问题的任何建议和示例。
【问题讨论】:
标签: c# asp.net .net sharepoint