2017-06-12 120 views
0

我正在实现一个小的mvc应用程序。我在处理Application_Error事件中的异常,意味着如果发生异常,我显示自定义错误页面。但是,对于一种情况,如果发生异常,我想显示一条警报消息。但我没有得到如何做到这一点。MVC中的内部服务器错误

EX:

public PartialViewResult EditUser(int? userId, int orgId) 
{ 
    var model = new UserViewModel(); 
    try 
    { 
     model.SelectedUser.OrgDaid = new Service.GetOrgDaid(orgId); 
    } 
    catch(Exception) 
    { 
    } 
    return view(model); 
} 

Service.cs:

public Daid GetOrgDaid(orgId) 
{ 
    Daid daid = null; 
    try 
    { 
     daid = daDataAccess.FirstOrDefault(x=>x.Id == orgId && type == "Org") 
    } 
    catch(Exception ex) 
    { 
     throw new Exception("Daid is null"); 
    } 
    return daid; 
} 

在上面的例子中,如果在异常GetOrgDaid occures然后我想显示相同的异常到用户在警报上相同的视图,其中用户的列表存在。

回答

0

您可以使用TempData存储异常(错误消息),并在发生异常时立即将其显示在页面上。我用这样的结构,看起来是这样的:

@if (TempData["ErrorMessage"] != null) 
{ 
    <script> 
     toastr.error('@Html.Raw(TempData["ErrorMessage"])', 'Error'); 
    </script> 
} 
+0

它不适用于我,因为我想显示一个错误消息,其中用户列表存在,我不想在EditUser视图上显示错误。 – user7745736

+0

事实上,您在EditUser操作中设置错误消息_并不意味着这是_only位置,您可以显示它:)。显示错误的HTML可能位于页面的任何位置,并且可以通过使用JavaScript来显示/显示。另一种选择是在异常时调用''RedirectToAction''',以便返回列表并在那里显示错误消息。 –

+0

是的,我知道了;)但我不想再次渲染相同的视图,因为它需要更多的时间,我只是想显示一条错误消息,而不加载新页面。所以跳过了选项RedirectToAction。 – user7745736

0

变化throw new Exception("Daid is null");throw new GetOrgException("Daid is null");。其中GetOrgException是一个新的例外,暗示Exception

然后改变捕捉赶上这个新的异常:

catch(GetOrgException ex) 
{ 
    model.LogException(ex); 
} 
catch(Exception) 
{ 
} 

如果你会写会提取要显示给用户的任何细节的新LogException方法。