diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
index e4755bc..72c8035 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
@@ -19,14 +19,14 @@ class ExposedFormTest extends UITestBase {
    *
    * @var array
    */
-  public static $testViews = array('test_reset_button', 'test_exposed_admin_ui');
+  public static $testViews = array('test_reset_button', 'test_exposed_admin_ui', 'test_exposed_form');
 
   /**
    * Modules to enable.
    *
    * @var array
    */
-  public static $modules = array('views_ui');
+  public static $modules = array('views_ui', 'views_test_form');
 
   public static function getInfo() {
     return array(
@@ -214,4 +214,20 @@ function testExposedAdminUi() {
     $this->assertFieldById('edit-options-expose-label', '', t('Make sure a label field is shown'));
   }
 
+  /**
+   * Tests a view which is rendered after a form with a validation error.
+   */
+  public function testFormErrorWithExposedForm() {
+    $nodes = array();
+    $nodes[] = $this->drupalCreateNode();
+    $nodes[] = $this->drupalCreateNode();
+
+    $this->drupalGet('test-form');
+    $this->assertRaw(t('Apply'), 'Ensure the exposed form is rendered before submitting the normal form.');
+
+    $this->drupalPost(NULL, array(), t('Submit'));
+    $this->assertRaw(t('Apply'), 'Ensure the exposed form is rendered after submitting the normal form.');
+
+  }
+
 }
diff --git a/core/modules/views/lib/Drupal/views/ViewExecutable.php b/core/modules/views/lib/Drupal/views/ViewExecutable.php
index 7447488..16a87b5 100644
--- a/core/modules/views/lib/Drupal/views/ViewExecutable.php
+++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php
@@ -994,8 +994,16 @@ public function build($display_id = NULL) {
 
     if ($this->display_handler->usesExposed()) {
       $exposed_form = $this->display_handler->getPlugin('exposed_form');
+      // (1) Record the errors before rendering the exposed form widgets
+      $errors_before = form_set_error();
       $this->exposed_widgets = $exposed_form->render_exposed_form();
-      if (form_set_error() || !empty($this->build_info['abort'])) {
+      // (2) Record the errors after rendering the exposed form widgets.
+      $errors_after = form_set_error();
+      // Find out if the validation of any of the elements in the exposed form
+      // has failed by comparing (1) and (2) above. Don't mess with the view
+      // otherwise.
+      $exposed_errors = count($errors_after) > count($errors_before);
+      if ($exposed_errors || !empty($this->build_info['abort'])) {
         $this->built = TRUE;
         // Don't execute the query, but rendering will still be executed to display the empty text.
         $this->executed = TRUE;
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
index 6d6adb3..5a9699d 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
@@ -1,4 +1,5 @@
 base_table: node
+base_field: nid
 core: '8'
 description: ''
 disabled: '0'
@@ -17,10 +18,60 @@ display:
         type: default
       row:
         type: fields
+      filters:
+        status:
+          id: status
+          table: node
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: '1'
+          group: '1'
+          exposed: '1'
+          expose:
+            operator_id: ''
+            label: Published
+            description: ''
+            use_operator: '0'
+            operator: status_op
+            identifier: status
+            required: '1'
+            remember: '0'
+            multiple: '0'
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+          is_grouped: '0'
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: '1'
+            widget: select
+            multiple: '0'
+            remember: '0'
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+      sorts:
+        created:
+          id: created
+          table: node
+          field: created
+          order: DESC
     display_plugin: default
     display_title: Master
     id: default
     position: '0'
+  embed_1:
+    display_plugin: embed
+    id: embed_1
+    display_title: Embed
+    position: ''
+    display_options: {  }
 human_name: ''
 id: test_exposed_form
 tag: ''
diff --git a/core/modules/views/tests/views_test_form/views_test_form.info b/core/modules/views/tests/views_test_form/views_test_form.info
new file mode 100644
index 0000000..0baaa59
--- /dev/null
+++ b/core/modules/views/tests/views_test_form/views_test_form.info
@@ -0,0 +1,7 @@
+name = Views test form
+description = Test module for a page with a normal form and a exposed form.
+package = Testing
+version = VERSION
+core = 8.x
+dependencies[] = views
+hidden = TRUE
diff --git a/core/modules/views/tests/views_test_form/views_test_form.module b/core/modules/views/tests/views_test_form/views_test_form.module
new file mode 100644
index 0000000..1732da5
--- /dev/null
+++ b/core/modules/views/tests/views_test_form/views_test_form.module
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Helper module for a views test with forms.
+ */
+
+/**
+ * Implements hook_menu().
+ */
+function views_test_form_menu() {
+  $items['test-form'] = array(
+    'page callback' => 'views_test_form_page',
+    'access callback' => TRUE,
+  );
+
+  return $items;
+}
+
+/**
+ * Page callback to render a form and a
+ *
+ * @see \Drupal\views\Tests\Plugin\ExposedFormTest::testFormErrorWithExposedForm()
+ */
+function views_test_form_page() {
+  $build = array();
+  $build['normal_form'] = drupal_get_form('views_test_form_test_form');
+  $build['embedded_view'] = array(
+    '#markup' => views_embed_view('test_exposed_form')
+  );
+
+  return $build;
+}
+
+/**
+ * Form constructor for the test form.
+ *
+ * @see views_test_form_test_form_validate
+ */
+function views_test_form_test_form() {
+  $form['text'] = array(
+    '#type' => 'textfield',
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Submit'),
+  );
+
+  return $form;
+}
+
+/**
+ * Form validation handler for the test form.
+ *
+ * @see views_test_form_test_form
+ */
+function views_test_form_test_form_validate(&$form, &$form_state) {
+  form_set_error('text', t('Form validation error'));
+}
