2017-02-18 46 views
0

我正在做自定義錯誤處理。
我的代碼:
的Global.asax:如何使用包含資源值的IController Execute()返回View?

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值,則瀏覽器只會獲取錯誤代碼,不會顯示頁面。如果我刪除所有這些,工作得很好。任何想法如何使視圖與資源一起工作?
另外,應該從Application_Errorcontroller處置的方法嗎?

+1

有時資源不會出現,如果文件不完全滿。例如,如果您的resource.rsx文件有20個條目,那麼resource.lang.resx必須具有相同的20個條目。不要緊,你在 –

+0

@DaniilT時不要使用它。得到它了。也許會嘗試以後完全填充文件。在這種情況下,資源值是否可能僅適用於一個視圖? –

+0

我把我的答案。可能......我不太確定。但是,當資源文件不全時,本地化沒有出現。 –

回答

0

如果文件未完全填滿,有時資源不會顯示。例如,如果您的資源文件有20個條目,那麼resource.lang.resx必須具有相同的20個條目。不要緊,你不使用它在

相關問題