Não é permitido que ações filhas executem ações de redirecionamento, depois de definir o site em HTTPS

Estou recebendo o erro abaixo:

Child actions are not allowed to perform redirect actions. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Child actions are not allowed to perform redirect actions. Source Error: Line 1: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> Line 2:  Line 3: The Stack trace is: [InvalidOperationException: Child actions are not allowed to perform redirect actions.] System.Web.Mvc.RedirectResult.ExecuteResult(ControllerContext context) +700064 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +727764 System.Web.Mvc.Controller.ExecuteCore() +159 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +334 System.Web.Mvc.c__DisplayClassb.b__5() +62 System.Web.Mvc.Async.c__DisplayClass1.b__0() +15 System.Web.Mvc.c__DisplayClasse.b__d() +52 System.Web.Mvc.c__DisplayClass4.b__3() +15 System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +41 System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +1411 [HttpException (0x80004005): Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.] System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +2819 System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +275 System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +94 System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +828 System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) +56 ASP.views_shared_renderaction_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\TFS\PEEP\Src\Main\Hosts\BCA.PEEP.WebSite\Views\Shared\RenderAction.ascx:2 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +131 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +150 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +12742749 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +249 System.Web.UI.Page.Render(HtmlTextWriter writer) +40 System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +65 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +150 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +12742749 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5363 

O código RenderAction.ascx onde eu recebo o erro na linha 2 é:

  <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>  

E a ação no controlador é:

 public ViewResult DashboardQuicksearch(UserFilter userFilter, bool? showAdvancedSearchLink) { int resultCount; List<KeyInfo> makeList = quickSearchProvider.GetKeysForCriteriaKey(SearchType.Vehicle, "MakeName", userFilter, "null", false, null, out resultCount); var selectListItems = new List(); foreach (KeyInfo item in makeList) { selectListItems.Add(new SelectListItem() { Text = item.Key, Value = item.Key, Selected = false }); } var viewModel = new DashboardQuicksearchViewModel() { MakeList = (makeList.Count == 1) ? new SelectList(selectListItems, "Value", "Text", selectListItems[0].Value) : new SelectList(selectListItems, "Value", "Text"), VehicleCount = quickSearchProvider.GetLotItemCount("null", userFilter), ShowAdvancedSearchLink = (showAdvancedSearchLink.HasValue ? showAdvancedSearchLink.Value : false) }; return View(Constants.Views.Search.DashboardQuicksearch, viewModel); } 

Eu não tenho absolutamente nenhuma idéia de como consertar isso.

EDITAR:

Este é o DashboardQuickSearch.ascx

 <%@ Control Language="C#" Inherits="BCA.PEEP.Web.UI.ViewUserControlBase" %>  
<%:Html.DropDownList("Models", new List(), Html.Text("Name of search results filter:SelectModel"), new { disabled = "disabled", @class="search-select"})%>
<input id="QSButton" type="button" value ="" onclick="ExecuteSearch()" disabled="disabled" />
$(document).ready(function () { var vehiclesSingular = ''; var vehiclesPlural = ''; var makeCount = ''; $('#Makes').change(function () { PopulateModels(); }); $('#Models').change(function () { UpdateVehicleCount(); }); $('#Makes').trigger('change'); function PopulateModels() { var make = $('#Makes').val(); var $models = $('#Models'); $models.append('' + '' + ''); //alert("Populate Models - Make = '" + make + "'"); if (make == '') { $models.attr('disabled', 'disabled'); $models.find('option').remove(); $models.append('' + '' + ''); $models.val(''); UpdateVehicleCount(); $('#QSButton').attr('disabled', 'disabled'); $('#QSButtonDiv').removeClass('PrimaryButton').addClass('Button'); return; } $.ajax({ type: 'GET', url: '/Search/GetModelsForMake/', data: { MakeName: make }, dataType: "json", success: function (results) { $models.find('option').remove(); $models.append('' + '' + ''); $(results.Models).each(function (index, model) { $models.append('' + model + ''); }); DisplayVehicleCount(results.VehicleCount); } }); $models.removeAttr('disabled'); $('#QSButton').removeAttr('disabled', 'disabled'); $('#QSButtonDiv').removeClass('Button').addClass('PrimaryButton'); } function UpdateVehicleCount() { var make = $('#Makes').val(); var model = $('#Models').val(); $.ajax({ type: 'GET', url: '/Search/GetMakeModelCount/', data: { MakeName: make, ModelName: model }, dataType: "json", success: function (result) { DisplayVehicleCount(result); } }); } function DisplayVehicleCount(vehicleCount) { var vehicles = (vehicleCount == '1') ? vehiclesSingular : vehiclesPlural; $('#VehicleCount').html('' + vehicleCount + '' + ' ' + vehicles); } }); function ExecuteSearch() { var make = $('#Makes').val(); var model = $('#Models').val(); if (make == '') return; window.location = '/Quicksearch/Vehicles?make=' + make + '&model=' + model; } function AdvancedSearch() { window.location = '/SearchVehicle'; window.location = '/Quicksearch/Vehicles'; }

Isso significa que:

  1. a ação correspondente ao URL foi processada e um resultado de visualização foi retornado.
  2. O mecanismo de visualização da ASP.NET MVC começou a renderizar a visualização, possivelmente enviando headers e parte do HTML para o navegador.
  3. o mecanismo de visualização encontrou uma chamada RenderAction (…) e iniciou a execução da ação.
  4. a ação tentou retornar um código de status do Redirect HTTP para o navegador

Neste ponto, o ASP.NET está perdido: ele já começou a enviar headers e HTML para o cliente, mas agora é solicitado que lembre de tudo isso e, em vez disso, envie um código de status de redirecionamento. Obviamente não pode fazer isso, então lança uma exceção.

Você terá que descobrir por que um redirecionamento está sendo acionado e certifique-se de que isso não aconteça. A causa mais provável (mas de forma alguma a única causa possível) é algum filtro de ação personalizado que não foi projetado para levar em conta ações de crianças. Os filtros de ação da ASP.NET MVCs geralmente verificam se a ação de execução foi chamada como uma ação filho e evitam redirecionamentos em tais cenários.

Você deve escrever return PartialView(...) invés de return View(...) para um childAction.

O problema era um ActionFilter na class ControllerBase. (eu não vi pela primeira vez)

Foi como

 [ActionFilters.RequireHttps(RequireSecure = false)] 

Teve que configurá-lo em ‘true’

Obrigado a todos por suas respostas.