Могу ли я вернуть представление из класса в mvc3? - PullRequest
0 голосов
/ 28 ноября 2011

Я новичок в c # и mvc3, так что это может быть довольно глупый вопрос: Мне нужно показывать представление Error.cshtml всякий раз, когда сообщение об ошибке отправляется в файл журнала.

Я не хочу каждый раз писать, чтобы вернуть представление. Вот почему я создал класс (называемый «CatchError»), который вызывается автоматически при отправке любой ошибки.

Например, я хочу показать представление, если статус не "True" в следующем случае:

if(status == "true")
  LogMessageFM.SuccessMessage("Feature Management success:" + userid + "/" + features + "/" + shape + "/" + lab + "/" + priceList);
else
  LogMessageFM.UnsuccessMessage("Feature Management unsuccess:" + userid + "/" + features + "/" + shape + "/" + lab + "/" + priceList);

Могу ли я вернуть представление из класса? Или я должен создать новый ActionResult, который получит ошибку и вернет представление с ошибкой ??

(Но тогда как я могу заставить его запускаться автоматически ... Есть ли такая опция?)

Я буду очень рад получить помощь. Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Если в вашем коде возникла исключительная ситуация, и у вас есть соответствующий тег customErrors в вашем файле web.config, то будет показан URL-адрес, указанный в defaultRedirect:

<customErrors mode="On" defaultRedirect="/Error/500" />

Вы можетезатем укажите маршрут, который указывает этот URL (/Error/500) на заданный вами вид.

Статья MSDN о customErrors

Обновлено после вопроса ниже

Значение defaultRedirect может указывать куда угодно.Поэтому, если у вас уже есть действие «CatchError» в контроллере «Home», вы можете просто сделать это: -

<customErrors mode="On" defaultRedirect="/Home/CatchError" />

Это означает, что если вы сможете перехватить ошибку в блоке try catchнапример, вы можете перенаправить пользователя к вашему действию CatchError.И если вы НЕ поймаете исключение, ваши пользователи будут автоматически отправлены туда в любом случае.

0 голосов
/ 28 ноября 2011

почти уверен, что если возвращаемый тип - ActionResult, вы можете вернуть представление.по умолчанию, если вы создаете класс, скажем, как объект, и у вас нет system.web.mvc, вам придется ссылаться на него в своем файле, но в остальном вы должны быть хорошими.

using System.Web.Mvc;

public ActionResult CatchError()
{
     if(LogicFails)
     {
         return View();
     }
     else
    {
         RedirectToAction("Index", "Home");
    }
}

Конечно, поскольку вы возвращаете ActionResult, вам в конечном итоге придется возвращать какой-то URL, но, по сути, все, что вы говорите, это когда вы выполняете этот запрос, и отправляете HTTP-запрос на этот URL.

Короче говоря, да, надеюсь, это поможет!

Счастливого кодирования!;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...