加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 使用ELMAH和ajax在ASP.Net MVC 4中的Controlle

发布时间:2020-12-16 06:49:28 所属栏目:asp.Net 来源:网络整理
导读:我已经看过很多帖子和文章但是我无法清楚地看到解决方案. 我已经通过NuGet安装了Elmah.MVC,并从FilterConfig.cs注释掉了这一行: //filters.Add(new HandleErrorAttribute()); 这样Elmah就会发现错误. 它在我提供无效的操作名称时起作用,我得到一个黄页和一
我已经看过很多帖子和文章但是我无法清楚地看到解决方案.

我已经通过NuGet安装了Elmah.MVC,并从FilterConfig.cs注释掉了这一行:

//filters.Add(new HandleErrorAttribute());

这样Elmah就会发现错误.

它在我提供无效的操作名称时起作用,我得到一个黄页和一封电子邮件.

我想知道我的代码可能生成的其他两种类型的错误…我们应该如何处理它们:

1.E.g.如果我的存储库或经理(业务逻辑)层在尝试访问数据库或发送电子邮件等时抛出异常.

一个.是不是在控制器(或其他任何地方)实现任何类型的try catch的正确方法,让Elmah处理异常?

湾如果是这样,如果它显示黄色错误页面,我们如何显示我们自己喜欢的视图?

2.如果我的观点包含ajax调用,例如通过jqgrid,在幕后有错误,我注意到他们也被Elmah正确选中了.但是,我如何向用户显示某种错误消息呢?

谢谢

解决方法

这是我做的:

在控制器中,我放置了try catch:

try
        {
            //model = getmodelfromdb();

            return View("MyView",model);
        }
        catch (Exception ex)
        {
            Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            return View("../Error/ShowException",ex);
        }

对于404的自定义视图,我在global.asax中执行了此操作:

protected void Application_OnError( )
    {
        var exception = Server.GetLastError( );

        Elmah.ErrorSignal.FromCurrentContext().Raise(exception);

        Helper.SetSessionValue(SessionKeys.EXCEPTION,exception);

        Response.Redirect( "~/Error/ShowException");
    }

对于jqgrid,我在我的控制器中执行了此操作:

[HttpPost]
    public ActionResult ListRecords( int page,DateTime? fromdate,DateTime? todate)
    {

               try
               {
                 var list = FetchListFromDB();

            var result = new
                {
                    total = Math.Ceiling(list.Count / (decimal)Helper.PAGE_SIZE),page = page,//--- current page
                    records = list.Count,//--- total items
                    rows = list.List.Select(x => new
                    {
                        id = x.EntityID,cell = new string[] 
                {
        x.Property1,x.Property2
                }
                    }).ToArray()
                };


            return Json(result,JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {

            var result = new
            {
                errorMessage = "An unexpected error occurred while fetching data. An automatic email has been generated for the support team who will address this issue shortly. Details: " + ex.Message,records = 0
            };

            Elmah.ErrorSignal.FromCurrentContext().Raise(ex);

            return Json(result,JsonRequestBehavior.AllowGet);
        }

这在视图中(在jqgrid定义中):

loadComplete:function(data)
        {
            if (data.errorMessage)
            {
                alert(data.errorMessage);
            }
        },

在一般的ajax场景中:

success: function(data)
        {
            if (data.errorMessage)
            {
                alert(data.errorMessage);
            }
            else
            {
                           //...
            }
        },

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读