2017-02-18 31 views
0

Я занимаюсь обработкой ошибок.
Мой код:
Global.asax:Как вернуть View с помощью IController Execute(), который содержит значения ресурсов?

public void Application_Error(Object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 

     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "ErrorPage"); 
     routeData.Values.Add("action", "Error"); 
     routeData.Values.Add("exception", new HandleErrorInfo(exception, "ErrorPage", "Error")); 

     if (exception.GetType() == typeof(HttpException)) 
     { 
      routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode()); 
     } 
     else 
     { 
      routeData.Values.Add("statusCode", 500); 
     } 

     Response.TrySkipIisCustomErrors = true; 
     var controller = new ErrorPageController(); 

     ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 
     Response.End(); 
    } 

Контроллер:

public class ErrorPageController : Controller 
{ 
    public ActionResult Error(int statusCode, HandleErrorInfo exception) 
    { 
     Response.StatusCode = statusCode; 
     ViewBag.StatusCode = statusCode.ToString(); 
     return View(exception); 
    } 
} 

Вид:

@model System.Web.Mvc.HandleErrorInfo 
@{ 
    ViewBag.Title = Resource.Error+ " " + (!String.IsNullOrEmpty(ViewBag.StatusCode)) ? ViewBag.StatusCode : "500" ; 
} 

<h1 class="error">@(Resource.Error + " " + (!String.IsNullOrEmpty(ViewBag.StatusCode)) ? ViewBag.StatusCode : "500" +". "+ Resource.Sorry):</h1> 
<h4><a href ="@Url.Action("Index","Home")"><i>@Resource.MainPage</i></a></h4> 

В основном это немного изменилось this ответ.
Если в моем представлении содержатся значения Resource, браузер только получает код ошибки, без страницы. Если я удалю их все, все будет хорошо. Любые идеи, как заставить просмотр работать с ресурсами?
Также, должен ли controller от Application_Error быть использован в методе?

+1

Иногда ресурс не отображается, если файл не заполнен полностью. Например, если ваш файл resource.rsx имеет 20 записей, то resource.lang.resx должен иметь одинаковые 20 записей. Не имеет значения, что вы не используете его в то время –

+0

@ DaniilT. понял. Возможно, он попытается полностью заполнить файлы позже. В этом случае возможно ли, что значения ресурсов не работают только для одного представления? –

+0

Я положил свой ответ. Наверное ... Я не совсем уверен. Но у меня такая ситуация, что локализация не появилась, когда ресурс не заполнен во всех файлах ресурсов. –

ответ

0

Иногда ресурс не отображается, если файл не заполнен полностью. Например, если ваш файл ресурсов имеет 20 записей, то resource.lang.resx должен иметь одинаковые 20 записей. Неважно, что вы не использовали его в то время