diff --git a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
index 62cb79c..e81f6a3 100644
--- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
+++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -133,6 +133,10 @@ public function renderExposedForm($block = FALSE) {
     }
 
     $form = \Drupal::formBuilder()->buildForm('\Drupal\views\Form\ViewsExposedForm', $form_state);
+    $errors = $form_state->getErrors();
+    if (!empty($errors)) {
+      $this->view->build_info['abort'] = TRUE;
+    }
 
     if (!$this->view->display_handler->displaysExposed() || (!$block && $this->view->display_handler->getOption('exposed_block'))) {
       return array();
diff --git a/core/modules/views/src/Tests/Plugin/ExposedFormTest.php b/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
index 55957e5..95d2fbb 100644
--- a/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
+++ b/core/modules/views/src/Tests/Plugin/ExposedFormTest.php
@@ -36,6 +36,8 @@ class ExposedFormTest extends ViewTestBase {
   protected function setUp() {
     parent::setUp();
 
+    $this->enableViewsTestModule();
+
     $this->drupalCreateContentType(array('type' => 'article'));
 
     // Create some random nodes.
@@ -398,4 +400,24 @@ protected function getExpectedExposedFormId(ViewExecutable $view) {
     return Html::cleanCssIdentifier('views-exposed-form-' . $view->storage->id() . '-' . $view->current_display);
   }
 
+  /**
+   * Tests a view which is rendered after a form with a validation error.
+   */
+  public function testFormErrorWithExposedForm() {
+    $this->drupalGet('views_test_data_error_form_page');
+    $this->assertResponse(200);
+    $form = $this->cssSelect('form.views-exposed-form');
+    $this->assertTrue($form, 'The exposed form element was found.');
+    $this->assertRaw(t('Apply'), 'Ensure the exposed form is rendered before submitting the normal form.');
+    $this->assertRaw('<div class="views-row">', 'Views result shown.');
+
+    $this->drupalPostForm(NULL, array(), t('Submit'));
+    $this->assertResponse(200);
+    $form = $this->cssSelect('form.views-exposed-form');
+    $this->assertTrue($form, 'The exposed form element was found.');
+    $this->assertRaw(t('Apply'), 'Ensure the exposed form is rendered after submitting the normal form.');
+    $this->assertRaw('<div class="views-row">', 'Views result shown.');
+
+  }
+
 }
diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php
index 786b10f..3b614a0 100644
--- a/core/modules/views/src/ViewExecutable.php
+++ b/core/modules/views/src/ViewExecutable.php
@@ -1223,7 +1223,7 @@ public function build($display_id = NULL) {
       /** @var \Drupal\views\Plugin\views\exposed_form\ExposedFormPluginInterface $exposed_form */
       $exposed_form = $this->display_handler->getPlugin('exposed_form');
       $this->exposed_widgets = $exposed_form->renderExposedForm();
-      if (FormState::hasAnyErrors() || !empty($this->build_info['abort'])) {
+      if (!empty($this->build_info['abort'])) {
         $this->built = TRUE;
         // Don't execute the query, $form_state, but rendering will still be executed to display the empty text.
         $this->executed = TRUE;
diff --git a/core/modules/views/tests/modules/views_test_data/src/Controller/ViewsTestDataController.php b/core/modules/views/tests/modules/views_test_data/src/Controller/ViewsTestDataController.php
new file mode 100644
index 0000000..08ccb98
--- /dev/null
+++ b/core/modules/views/tests/modules/views_test_data/src/Controller/ViewsTestDataController.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views_test_data\Controller\ViewsTestDataController.
+ */
+
+namespace Drupal\views_test_data\Controller;
+
+/**
+ * Controller class for views_test_data callbacks.
+ */
+class ViewsTestDataController {
+
+  /**
+   * Renders an error form page.
+   *
+   * This contains a form that will contain an error and an embedded view with
+   * an exposed form.
+   */
+  public function errorFormPage() {
+    $build = array();
+    $build['view'] = array(
+      '#type' => 'view',
+      '#name' => 'test_exposed_form_buttons',
+    );
+    $build['error_form'] = \Drupal::formBuilder()->getForm('Drupal\views_test_data\Form\ViewsTestDataErrorForm');
+
+    return $build;
+  }
+
+}
diff --git a/core/modules/views/tests/modules/views_test_data/src/Form/ViewsTestDataErrorForm.php b/core/modules/views/tests/modules/views_test_data/src/Form/ViewsTestDataErrorForm.php
new file mode 100644
index 0000000..cac108f
--- /dev/null
+++ b/core/modules/views/tests/modules/views_test_data/src/Form/ViewsTestDataErrorForm.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\views_test_data\Form\ViewsTestDataErrorForm.
+ */
+
+namespace Drupal\views_test_data\Form;
+
+use Drupal\Core\Form\FormInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Simple form page callback to test the view element.
+ */
+class ViewsTestDataErrorForm implements FormInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'views_test_data_error_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $form['text'] = array(
+      '#type' => 'textfield',
+    );
+    $form['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Submit'),
+    );
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    $form_state->setErrorByName('text', t('Form validation error'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+  }
+
+}
diff --git a/core/modules/views/tests/modules/views_test_data/views_test_data.routing.yml b/core/modules/views/tests/modules/views_test_data/views_test_data.routing.yml
index cb0ad63..1bf63f4 100644
--- a/core/modules/views/tests/modules/views_test_data/views_test_data.routing.yml
+++ b/core/modules/views/tests/modules/views_test_data/views_test_data.routing.yml
@@ -19,3 +19,11 @@ views_test_data.form_multiple:
     _controller: '\Drupal\views_test_data\Controller\ViewsTestFormMultipleController::testPage'
   requirements:
     _access: 'TRUE'
+
+views_test_data.error_form_page:
+  path: '/views_test_data_error_form_page'
+  defaults:
+    _title: 'Test Views Form Exposed Errors'
+    _controller: '\Drupal\views_test_data\Controller\ViewsTestDataController::errorFormPage'
+  requirements:
+    _access: 'TRUE'
