actionresult обновить текущую страницу - PullRequest
2 голосов
/ 11 августа 2011

Из некоторых методов действия я хочу вернуть результат, который заставит текущую страницу обновиться.

Я написал это, чтобы получить такой результат:

 public class RefreshResult : ActionResult {

        public override void ExecuteResult(ControllerContext context) {
            Uri referrer = context.HttpContext.Request.UrlReferrer;
            if(referrer == null || string.IsNullOrEmpty(referrer.AbsoluteUri)) {
                return;
            }
            context.HttpContext.Response.Redirect(referrer.AbsoluteUri);
        }
    } 

В моих методах действия я просто возвращаю новый RefreshResult. Это работает, но мне любопытно о возможных ограничениях такого подхода. Меня не интересует предоставление клиентам возможности доступа к методам действий, которые возвращают такие результаты напрямую, поэтому я думаю, что всегда смогу обновить текущую страницу таким образом. Я прав?

Я нашел это (и пару других вопросов) на stackoverflow: ActionResult возврат на страницу, которая его назвала

Но меня больше интересуют возможные ограничения такого подхода, а не «как».

Спасибо заранее

Ответы [ 2 ]

4 голосов
/ 25 августа 2017

Руан ответ является одним из способов обновления страницы.Другой - перенаправить обратно на URL-адрес, с которого был отправлен запрос, и нет необходимости писать реализацию самостоятельно, просто выполните это в обычном действии в контроллере.

Действие может выглядеть следующим образом

public ActionResult SomeAction()
{
    //do some work here...

    return Redirect(Request.UrlReferrer.ToString());
}
1 голос
/ 18 августа 2011

Я не уверен, что вы подразумеваете под "результатом, который заставит текущую страницу обновиться".Если вы выполняете действие на сервере, вы уже «обновляете» страницу.

Если вам нужен какой-то шаблон post-redirect-get для того, чтобы снова «приземлиться» на исходную страницу с помощью действия GET, это очень просто - просто реализуйте свой собственный ActionResult, полученный из RedirectToRouteResult (используетсяс помощью метода RedirectToAction () в Controller) и предоставьте ему текущие значения маршрута.

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

...