2015-12-17 5 views
2

В моем методе действий я использовал блок try-catch. Метод ожидает целочисленный параметр и когда передается пустое значение. Отображается страница ошибки сервера. Но я хочу, чтобы он был перенаправлен на страницу пользовательской ошибки.Перенаправление при возникновении аргумента

[HandleError(ExceptionType = typeof(ArgumentException), View = "~/Views/SetValues/Error")] 
public ActionResult Index(int id) 
{ 
     //if(id==null) 
     //{ 
     // ViewBag.Error = "A null parameters passed to the function"; 
     // return View("Error"); 
     //} 
     try 
     { 
      ......... 
     } 
     catch (Exception e) 
     { 
      ViewBag.Error = e.Message; 
      return View("Error"); 
     } 
} 

Блок catch try не выполняется, поскольку передается нулевой параметр. Оператор if также не работает, потому что проверка всегда терпит неудачу.

Есть ли работа, не задавая параметр NULL?

Вместо моей функции, перенаправляемой на страницу с ошибкой сервера, я хочу, чтобы она перенаправлялась на мою страницу пользовательских ошибок.

ответ

3

Не уверен, но попробовать атрибут фильтра:

public class IdRequiredAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     object parameter = null; 
     filterContext.ActionParameters.TryGetValue("id", out parameter); 
     var id = parameter as int?; 

     if (id == null) 
     { 
      var urlHelper = new UrlHelper(filterContext.Controller.ControllerContext.RequestContext); 

      var url = urlHelper.Action("ErrorAction", "ControllerName"); 

      filterContext.Result = new RedirectResult(url); 
     } 
    } 
} 

... 

[IdRequiredAttribute] 
public ActionResult Index(int id) 
{ 
    //... 
} 
+1

Я удалил свой комментарий, потому что он больше не действителен. Так что необходимо, чтобы я написал его во всех функциях, где мне нужна эта проверка? – Vini

+0

Работа с перенаправлением. Но он не возвращает мой вид. Но я должен это исправить. – Vini

+0

Он отлично работает. :) Спасибо – Vini

0

право исправить это сделать параметр как обнуляемым и проверить

[HandleError(ExceptionType = typeof(ArgumentException), View = "~/Views/SetValues/Error")] 
public ActionResult Index(int? id) 
{ 
     if(id==null) 
     { 
      ViewBag.Error = "A null parameters passed to the function"; 
      return View("Error"); 
     } 
     try 
     { 
      ......... 
     } 
     catch (Exception e) 
     { 
      ViewBag.Error = e.Message; 
      return View("Error"); 
     } 
} 

Еще один момент, если вы не сделаете это обнуляемым то MVC рамки не достигнут вашего действия индекса, так как он не сможет решить маршрут. Обходным путем может быть сделать параметр как строку и проверить, можете ли вы проанализировать целочисленное значение из него, чтобы продолжить.

+0

Но я уже упоминал в вопросе о работе, не делая параметр нулевым. Спасибо за Ваш ответ. – Vini

0

Чтобы отобразить пользовательскую страницу ошибки выполните следующие действия -> В файле Web.config добавить это под

<customErrors mode="On" defaultRedirect="~/Controller/Action" /> 

, а затем использовать этот контроллер и просмотра, чтобы отобразить страницу ошибки.

Примечание: - это может использоваться для неперехваченного исключения и избегать желтых страниц (страница с ошибкой). Однако вы также должны использовать журнал ошибок для подробного описания. Check this link for error logging

Используя это, вы также можете обрабатывать 404 и другое исключение.

Смежные вопросы