Как я могу инкапсулировать код, который выполняет возврат в C # MVC?

#c# #asp.net-mvc #asp.net-mvc-3

#c# #asp.net-mvc #asp.net-mvc-3

Вопрос:

У меня есть следующий код, который возвращается в конце некоторых моих действий в моих контроллерах. Вместо того, чтобы повторять один и тот же код много раз, я хотел бы его инкапсулировать:

         if (Session["CurrentUrl"] != null) {
            var ip = new Uri((string)Session["CurrentUrl"]);
            var ipNoPort = string.Format("{0}://{1}/{2}", ip.Scheme, ip.Host, ip.PathAndQuery);
            return Redirect(ipNoPort);
        }
        return Home();
  

В одном я не уверен, так это в том, как я мог бы обрабатывать возвращаемые аргументы. У кого-нибудь есть какие-либо предложения о том, что я мог бы сделать?

Комментарии:

1. Как насчет использования базового класса контроллера?

Ответ №1:

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

Посмотрите на эту фильтрацию действий в ASP.NET Приложения MVC

Ответ №2:

Вы должны возвращать RedirectResult . Вы всегда должны возвращать что-то производное от ActionResult , иначе вы создадите потенциальные проблемы.

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

Комментарии:

1. Я использую код в конце действия edit POST, чтобы вернуть пользователя к строкам данных, чтобы он мог выбрать другую строку для редактирования. В этом случае у меня действительно нет результата для возврата.