diff --git a/core/core.services.yml b/core/core.services.yml
index 9b1ab37..ede9d6a 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -844,6 +844,11 @@ services:
     class: Drupal\Core\EventSubscriber\ContentControllerSubscriber
     tags:
       - { name: event_subscriber }
+  route_form_controller_subscriber:
+    class: Drupal\Core\EventSubscriber\FormControllerSubscriber
+    arguments: ['@ajax_form_handler_rename_me', '@controller_resolver']
+    tags:
+      - { name: event_subscriber }
   route_special_attributes_subscriber:
     class: Drupal\Core\EventSubscriber\SpecialAttributesRouteSubscriber
     tags:
@@ -890,6 +895,9 @@ services:
   controller.entity_form:
     class: Drupal\Core\Entity\HtmlEntityFormController
     arguments: ['@controller_resolver', '@form_builder', '@entity.manager']
+  ajax_form_handler_rename_me:
+    class: Drupal\Core\Form\FormAjaxHandler
+    arguments: ['@main_content_renderer.ajax', '@current_route_match']
   router_listener:
     class: Symfony\Component\HttpKernel\EventListener\RouterListener
     tags:
diff --git a/core/lib/Drupal/Core/Controller/FormController.php b/core/lib/Drupal/Core/Controller/FormController.php
index 6a9b9d5..85884c5 100644
--- a/core/lib/Drupal/Core/Controller/FormController.php
+++ b/core/lib/Drupal/Core/Controller/FormController.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Controller;
 
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
+use Drupal\Core\Form\FormAndFormState;
 use Drupal\Core\Form\FormBuilderInterface;
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Routing\RouteMatchInterface;
@@ -76,7 +77,14 @@ public function getContentResult(Request $request, RouteMatchInterface $route_ma
     unset($args[0], $args[1]);
     $form_state->addBuildInfo('args', array_values($args));
 
-    return $this->formBuilder->buildForm($form_object, $form_state);
+    // @todo.
+    $form_state->setPostToOriginalUrl();
+    if ($request->query->get('magic_string_to_be_renamed') === 'drupal_ajax_post') {
+      $form_state->disableRedirect();
+    }
+
+    $form_array = $this->formBuilder->buildForm($form_object, $form_state);
+    return new FormAndFormState($form_array, $form_state);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/EventSubscriber/FormControllerSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FormControllerSubscriber.php
new file mode 100644
index 0000000..b8bfa5c
--- /dev/null
+++ b/core/lib/Drupal/Core/EventSubscriber/FormControllerSubscriber.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\EventSubscriber\FormControllerSubscriber.
+ */
+
+namespace Drupal\Core\EventSubscriber;
+
+use Drupal\Core\Ajax\UpdateBuildIdCommand;
+use Drupal\Core\Controller\ControllerResolverInterface;
+use Drupal\Core\Form\FormAjaxHandler;
+use Drupal\Core\Form\FormAndFormState;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
+use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+
+/**
+ * @todo.
+ */
+class FormControllerSubscriber implements EventSubscriberInterface {
+
+  /**
+   * @todo.
+   *
+   * @var \Drupal\Core\Form\FormAjaxHandler
+   */
+  protected $formAjaxHandler;
+
+  /**
+   * @todo.
+   *
+   * @var \Drupal\Core\Controller\ControllerResolverInterface
+   */
+  protected $controllerResolver;
+
+  /**
+   * @todo.
+   *
+   * @param \Drupal\Core\Form\FormAjaxHandler $form_ajax_handler
+   * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
+   */
+  public function __construct(FormAjaxHandler $form_ajax_handler, ControllerResolverInterface $controller_resolver) {
+    $this->formAjaxHandler = $form_ajax_handler;
+    $this->controllerResolver = $controller_resolver;
+  }
+
+  /**
+   * @todo.
+   */
+  public function onKernelController(FilterControllerEvent $event) {
+    $request = $event->getRequest();
+    if ($request->query->get('magic_string_to_be_renamed') === 'drupal_ajax_post') {
+      $original_controller = $event->getController();
+
+      $event->setController(function (Request $request) use ($original_controller) {
+        // Call the original controller for the page (usually either
+        // controller.form:getContentResult or
+        // controller.entity_form:getContentResult).
+        $arguments = $this->controllerResolver->getArguments($request, $original_controller);
+        $response = call_user_func_array($original_controller, $arguments);
+
+        $form = $response->getForm();
+        $form_state = $response->getFormState();
+        $form_build_id = $request->request->get('form_build_id');
+
+        $commands = [];
+        if ($form_build_id != $form['#build_id']) {
+          // If the form build ID has changed, issue an Ajax command to update it.
+          $commands[] = new UpdateBuildIdCommand($form_build_id, $form['#build_id']);
+        }
+        return $this->formAjaxHandler->handle($request, $form, $form_state, $commands);
+      });
+    }
+  }
+
+  /**
+   * @todo.
+   */
+  public function onViewRenderArray(GetResponseForControllerResultEvent $event) {
+    $request = $event->getRequest();
+
+    if (($request->attributes->has('_form') || $request->attributes->has('_entity_form')) && ($result = $event->getControllerResult()) instanceof FormAndFormState) {
+      $event->setControllerResult($result->getForm());
+    }
+  }
+
+  /**
+   * Registers the methods in this class that should be listeners.
+   *
+   * @return array
+   *   An array of event listener definitions.
+   */
+  public static function getSubscribedEvents() {
+    $events[KernelEvents::CONTROLLER][] = ['onKernelController'];
+    $events[KernelEvents::VIEW][] = ['onViewRenderArray'];
+
+    return $events;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Form/FormAjaxHandler.php b/core/lib/Drupal/Core/Form/FormAjaxHandler.php
new file mode 100644
index 0000000..3bb0b37
--- /dev/null
+++ b/core/lib/Drupal/Core/Form/FormAjaxHandler.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Form\FormAjaxHandler.
+ */
+
+namespace Drupal\Core\Form;
+
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Render\MainContent\MainContentRendererInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+
+/**
+ * @todo.
+ */
+class FormAjaxHandler {
+
+  /**
+   * The main content to AJAX Response renderer.
+   *
+   * @var \Drupal\Core\Render\MainContent\MainContentRendererInterface
+   */
+  protected $ajaxRenderer;
+
+  /**
+   * The current route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
+  /**
+   * @param \Drupal\Core\Render\MainContent\MainContentRendererInterface $ajax_renderer
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   */
+  public function __construct(MainContentRendererInterface $ajax_renderer, RouteMatchInterface $route_match) {
+    $this->ajaxRenderer = $ajax_renderer;
+    $this->routeMatch = $route_match;
+  }
+
+  public function handle(Request $request, $form, FormStateInterface $form_state, $commands) {
+    // We need to return the part of the form (or some other content) that needs
+    // to be re-rendered so the browser can update the page with changed content.
+    // Since this is the generic menu callback used by many Ajax elements, it is
+    // up to the #ajax['callback'] function of the element (may or may not be a
+    // button) that triggered the Ajax request to determine what needs to be
+    // rendered.
+    $callback = NULL;
+    if ($triggering_element = $form_state->getTriggeringElement()) {
+      $callback = $triggering_element['#ajax']['callback'];
+    }
+    $callback = $form_state->prepareCallback($callback);
+    if (empty($callback) || !is_callable($callback)) {
+      throw new HttpException(500, 'The specified #ajax callback is empty or not callable.');
+    }
+    $result = call_user_func_array($callback, [&$form, &$form_state]);
+
+    // If the callback is an #ajax callback, the result is a render array, and
+    // we need to turn it into an AJAX response, so that we can add any commands
+    // we got earlier; typically the UpdateBuildIdCommand when handling an AJAX
+    // submit from a cached page.
+    if ($result instanceof AjaxResponse) {
+      $response = $result;
+    }
+    else {
+      /** @var \Drupal\Core\Ajax\AjaxResponse $response */
+      $response = $this->ajaxRenderer->renderResponse($result, $request, $this->routeMatch);
+    }
+
+    foreach ($commands as $command) {
+      $response->addCommand($command, TRUE);
+    }
+    return $response;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Form/FormAndFormState.php b/core/lib/Drupal/Core/Form/FormAndFormState.php
new file mode 100644
index 0000000..2a01b52
--- /dev/null
+++ b/core/lib/Drupal/Core/Form/FormAndFormState.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Form\FormAndFormState.
+ */
+
+namespace Drupal\Core\Form;
+
+/**
+ * @todo.
+ */
+class FormAndFormState {
+
+  /**
+   * The form to cache.
+   *
+   * @var array
+   */
+  protected $form;
+
+  /**
+   * The form state.
+   *
+   * @var \Drupal\Core\Form\FormStateInterface
+   */
+  protected $formState;
+
+  /**
+   * Constructs a FormAndFormState object.
+   *
+   * @param array $form
+   *   The form definition.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The form state.
+   */
+  public function __construct(array $form, FormStateInterface $form_state) {
+    $this->form = $form;
+    $this->formState = $form_state;
+  }
+
+  /**
+   * Gets the form definition.
+   *
+   * @return array
+   */
+  public function getForm() {
+    return $this->form;
+  }
+
+  /**
+   * Gets the form state.
+   *
+   * @return \Drupal\Core\Form\FormStateInterface
+   */
+  public function getFormState() {
+    return $this->formState;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Form/FormState.php b/core/lib/Drupal/Core/Form/FormState.php
index 9d651cd..f2d412c 100644
--- a/core/lib/Drupal/Core/Form/FormState.php
+++ b/core/lib/Drupal/Core/Form/FormState.php
@@ -427,6 +427,13 @@ class FormState implements FormStateInterface {
   protected $submit_handlers = [];
 
   /**
+   * @todo.
+   *
+   * @var bool
+   */
+  protected $postToOriginalUrl = FALSE;
+
+  /**
    * {@inheritdoc}
    */
   public function setFormState(array $form_state_additions) {
@@ -1245,6 +1252,17 @@ public function cleanValues() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function setPostToOriginalUrl($post_to_original_url = TRUE) {
+    $this->postToOriginalUrl = (bool) $post_to_original_url;
+    return $this;
+  }
+  public function willPostToOriginalUrl() {
+    return $this->postToOriginalUrl;
+  }
+
+  /**
    * Wraps drupal_set_message().
    *
    * @return array|null
diff --git a/core/lib/Drupal/Core/Form/FormStateInterface.php b/core/lib/Drupal/Core/Form/FormStateInterface.php
index 5e44ecb..5af31d0 100644
--- a/core/lib/Drupal/Core/Form/FormStateInterface.php
+++ b/core/lib/Drupal/Core/Form/FormStateInterface.php
@@ -1074,4 +1074,14 @@ public function addCleanValueKey($key);
    */
   public function cleanValues();
 
+  /**
+   * @todo.
+   */
+  public function setPostToOriginalUrl($post_to_original_url = TRUE);
+
+  /**
+   * @todo.
+   */
+  public function willPostToOriginalUrl();
+
 }
diff --git a/core/lib/Drupal/Core/Render/Element/RenderElement.php b/core/lib/Drupal/Core/Render/Element/RenderElement.php
index 87b9f02..49823ca 100644
--- a/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -127,8 +127,17 @@ public static function preRenderGroup($element) {
    * @see self::preRenderAjaxForm()
    */
   public static function processAjaxForm(&$element, FormStateInterface $form_state, &$complete_form) {
+    if (!empty($element['#ajax'])) {
+      if (isset($element['#ajax']['url'])) {
+        $form_state->setPostToOriginalUrl(FALSE);
+      }
+      if ($form_state->willPostToOriginalUrl()) {
+        $element['#ajax']['url'] = Url::fromRoute('<current>');
+        $element['#ajax']['options']['query']['magic_string_to_be_renamed'] = 'drupal_ajax_post';
+      }
+    }
     $element = static::preRenderAjaxForm($element);
-    if (!empty($element['#ajax_processed'])) {
+    if (!empty($element['#ajax_processed']) && !$form_state->willPostToOriginalUrl()) {
       $form_state->setCached();
     }
     return $element;
diff --git a/core/modules/file/src/Controller/FileWidgetAjaxController.php b/core/modules/file/src/Controller/FileWidgetAjaxController.php
index 90176f8..c16ec93 100644
--- a/core/modules/file/src/Controller/FileWidgetAjaxController.php
+++ b/core/modules/file/src/Controller/FileWidgetAjaxController.php
@@ -10,7 +10,12 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\ReplaceCommand;
+use Drupal\Core\Form\FormAjaxHandler;
+use Drupal\Core\Form\FormBuilderInterface;
+use Drupal\Core\Render\RendererInterface;
 use Drupal\system\Controller\FormAjaxController;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
@@ -21,6 +26,42 @@
 class FileWidgetAjaxController extends FormAjaxController {
 
   /**
+   * The renderer.
+   *
+   * @var \Drupal\Core\Render\RendererInterface
+   */
+  protected $renderer;
+
+  /**
+   * Constructs a FormAjaxController object.
+   *
+   * @param \Psr\Log\LoggerInterface $logger
+   *   A logger instance.
+   * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
+   *   The form builder.
+   * @param \Drupal\Core\Form\FormAjaxHandler $form_ajax_handler
+   *   @todo.
+   * @param \Drupal\Core\Render\RendererInterface $renderer
+   *   The renderer.
+   */
+  public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxHandler $form_ajax_handler, RendererInterface $renderer) {
+    parent::__construct($logger, $form_builder, $form_ajax_handler);
+    $this->renderer = $renderer;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('logger.factory')->get('ajax'),
+      $container->get('form_builder'),
+      $container->get('ajax_form_handler_rename_me'),
+      $container->get('renderer')
+    );
+  }
+
+  /**
    * Processes AJAX file uploads and deletions.
    *
    * @param \Symfony\Component\HttpFoundation\Request $request
diff --git a/core/modules/system/src/Controller/FormAjaxController.php b/core/modules/system/src/Controller/FormAjaxController.php
index 0c29322..bd091d4 100644
--- a/core/modules/system/src/Controller/FormAjaxController.php
+++ b/core/modules/system/src/Controller/FormAjaxController.php
@@ -7,20 +7,16 @@
 
 namespace Drupal\system\Controller;
 
-use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\UpdateBuildIdCommand;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Form\FormAjaxHandler;
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Form\FormBuilderInterface;
-use Drupal\Core\Render\MainContent\MainContentRendererInterface;
-use Drupal\Core\Render\RendererInterface;
-use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\system\FileAjaxForm;
 use Psr\Log\LoggerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
-use Symfony\Component\HttpKernel\Exception\HttpException;
 
 /**
  * Defines a controller to respond to form Ajax requests.
@@ -42,25 +38,11 @@ class FormAjaxController implements ContainerInjectionInterface {
   protected $formBuilder;
 
   /**
-   * The renderer.
+   * @todo.
    *
-   * @var \Drupal\Core\Render\RendererInterface
+   * @var \Drupal\Core\Form\FormAjaxHandler
    */
-  protected $renderer;
-
-  /**
-   * The main content to AJAX Response renderer.
-   *
-   * @var \Drupal\Core\Render\MainContent\MainContentRendererInterface
-   */
-  protected $ajaxRenderer;
-
-  /**
-   * The current route match.
-   *
-   * @var \Drupal\Core\Routing\RouteMatchInterface
-   */
-  protected $routeMatch;
+  protected $formAjaxHandler;
 
   /**
    * Constructs a FormAjaxController object.
@@ -69,19 +51,13 @@ class FormAjaxController implements ContainerInjectionInterface {
    *   A logger instance.
    * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
    *   The form builder.
-   * @param \Drupal\Core\Render\RendererInterface $renderer
-   *   The renderer.
-   * @param \Drupal\Core\Render\MainContent\MainContentRendererInterface $ajax_renderer
-   *   The main content to AJAX Response renderer.
-   * @param \Drupal\Core\Routing\RouteMatchInterface
-   *   The current route match.
+   * @param \Drupal\Core\Form\FormAjaxHandler $form_ajax_handler
+   *   @todo.
    */
-  public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, RendererInterface $renderer, MainContentRendererInterface $ajax_renderer, RouteMatchInterface $route_match) {
+  public function __construct(LoggerInterface $logger, FormBuilderInterface $form_builder, FormAjaxHandler $form_ajax_handler) {
     $this->logger = $logger;
     $this->formBuilder = $form_builder;
-    $this->renderer = $renderer;
-    $this->ajaxRenderer = $ajax_renderer;
-    $this->routeMatch = $route_match;
+    $this->formAjaxHandler = $form_ajax_handler;
   }
 
   /**
@@ -91,9 +67,7 @@ public static function create(ContainerInterface $container) {
     return new static(
       $container->get('logger.factory')->get('ajax'),
       $container->get('form_builder'),
-      $container->get('renderer'),
-      $container->get('main_content_renderer.ajax'),
-      $container->get('current_route_match')
+      $container->get('ajax_form_handler_rename_me')
     );
   }
 
@@ -121,38 +95,7 @@ public function content(Request $request) {
 
     $this->formBuilder->processForm($form['#form_id'], $form, $form_state);
 
-    // We need to return the part of the form (or some other content) that needs
-    // to be re-rendered so the browser can update the page with changed content.
-    // Since this is the generic menu callback used by many Ajax elements, it is
-    // up to the #ajax['callback'] function of the element (may or may not be a
-    // button) that triggered the Ajax request to determine what needs to be
-    // rendered.
-    $callback = NULL;
-    if ($triggering_element = $form_state->getTriggeringElement()) {
-      $callback = $triggering_element['#ajax']['callback'];
-    }
-    $callback = $form_state->prepareCallback($callback);
-    if (empty($callback) || !is_callable($callback)) {
-      throw new HttpException(500, 'The specified #ajax callback is empty or not callable.');
-    }
-    $result = call_user_func_array($callback, [&$form, &$form_state]);
-
-    // If the callback is an #ajax callback, the result is a render array, and
-    // we need to turn it into an AJAX response, so that we can add any commands
-    // we got earlier; typically the UpdateBuildIdCommand when handling an AJAX
-    // submit from a cached page.
-    if ($result instanceof AjaxResponse) {
-      $response = $result;
-    }
-    else {
-      /** @var \Drupal\Core\Ajax\AjaxResponse $response */
-      $response = $this->ajaxRenderer->renderResponse($result, $request, $this->routeMatch);
-    }
-
-    foreach ($commands as $command) {
-      $response->addCommand($command, TRUE);
-    }
-    return $response;
+    return $this->formAjaxHandler->handle($request, $form, $form_state, $commands);
   }
 
   /**
diff --git a/core/modules/system/src/FileAjaxForm.php b/core/modules/system/src/FileAjaxForm.php
index 1be14b4..749369c 100644
--- a/core/modules/system/src/FileAjaxForm.php
+++ b/core/modules/system/src/FileAjaxForm.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\system;
 
+use Drupal\Core\Form\FormAndFormState;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -14,21 +15,7 @@
  *
  * @ingroup ajax
  */
-class FileAjaxForm {
-
-  /**
-   * The form to cache.
-   *
-   * @var array
-   */
-  protected $form;
-
-  /**
-   * The form state.
-   *
-   * @var \Drupal\Core\Form\FormStateInterface
-   */
-  protected $formState;
+class FileAjaxForm extends FormAndFormState {
 
   /**
    * The unique form ID.
@@ -66,8 +53,7 @@ class FileAjaxForm {
    *   The ajax commands.
    */
   public function __construct(array $form, FormStateInterface $form_state, $form_id, $form_build_id, array $commands) {
-    $this->form = $form;
-    $this->formState = $form_state;
+    parent::__construct($form, $form_state);
     $this->formId = $form_id;
     $this->formBuildId = $form_build_id;
     $this->commands = $commands;
@@ -84,15 +70,6 @@ public function getCommands() {
   }
 
   /**
-   * Gets the form definition.
-   *
-   * @return array
-   */
-  public function getForm() {
-    return $this->form;
-  }
-
-  /**
    * Gets the unique form build ID.
    *
    * @return string
@@ -110,13 +87,4 @@ public function getFormId() {
     return $this->formId;
   }
 
-  /**
-   * Gets the form state.
-   *
-   * @return \Drupal\Core\Form\FormStateInterface
-   */
-  public function getFormState() {
-    return $this->formState;
-  }
-
 }
diff --git a/core/modules/system/src/Tests/Ajax/DialogTest.php b/core/modules/system/src/Tests/Ajax/DialogTest.php
index e290977..223b066 100644
--- a/core/modules/system/src/Tests/Ajax/DialogTest.php
+++ b/core/modules/system/src/Tests/Ajax/DialogTest.php
@@ -165,7 +165,7 @@ public function testDialog() {
       'edit-preview' => [
         'callback' => '::preview',
         'event' => 'click',
-        'url' => Url::fromRoute('system.ajax')->toString(),
+        'url' => Url::fromRoute('ajax_test.dialog_form')->setOption('query', ['magic_string_to_be_renamed' => 'drupal_ajax_post'])->toString(),
         'dialogType' => 'ajax',
         'submit' => [
           '_triggering_element_name' => 'op',
diff --git a/core/modules/views_ui/admin.inc b/core/modules/views_ui/admin.inc
index 64b9077..9551d9a 100644
--- a/core/modules/views_ui/admin.inc
+++ b/core/modules/views_ui/admin.inc
@@ -50,6 +50,7 @@ function views_ui_add_ajax_trigger(&$wrapping_element, $trigger_key, $refresh_pa
 
   // Add the AJAX behavior to the triggering element.
   $triggering_element = &$wrapping_element[$trigger_key];
+  $triggering_element['#ajax']['url'] = Url::fromRoute('system.ajax');
   $triggering_element['#ajax']['callback'] = 'views_ui_ajax_update_form';
   // We do not use \Drupal\Component\Utility\Html::getUniqueId() to get an ID
   // for the AJAX wrapper, because it remembers IDs across AJAX requests (and
