Las acciones secundarias no pueden realizar acciones de redirección, después de configurar el sitio en HTTPS

Estoy obteniendo el error a continuación:

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 

El código RenderAction.ascx donde recibo el error en la línea 2 es:

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

Y la acción en el controlador es:

 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); } 

No tengo ni idea de cómo solucionarlo.

EDITAR:

Este es el 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'; }

Esto significa que:

  1. la acción correspondiente a la URL se ha procesado y se ha devuelto un resultado de vista.
  2. El motor de vistas de ASP.NET MVC ha comenzado a renderizar la vista, posiblemente enviando encabezados y parte del HTML al navegador.
  3. el motor de vista ha encontrado una llamada RenderAction (…) y ha comenzado a ejecutar la acción.
  4. la acción ha intentado devolver un código de estado HTTP de redireccionamiento al navegador

En este punto, ASP.NET está perdido: ya ha comenzado a enviar encabezados y HTML al cliente, pero ahora de repente se le pide que lo recuerde y en su lugar envíe un código de estado de redirección. Obviamente no puede hacer eso, por lo que arroja una excepción.

Tendrá que descubrir por qué se está desencadenando un redireccionamiento y asegurarse de que eso no suceda. La causa más probable (pero de ninguna manera la única causa posible) es algún filtro de acción personalizado que no se haya diseñado para tener en cuenta las acciones secundarias. Los filtros de acción de ASP.NET MVC normalmente verifican si la acción de ejecución se ha llamado como una acción secundaria y evitan las redirecciones en dichos escenarios.

Debería escribir return PartialView(...) return View(...) lugar de return View(...) para un childAction.

El problema era un ActionFilter en la clase ControllerBase. (No lo vi la primera vez)

Fue como

 [ActionFilters.RequireHttps(RequireSecure = false)] 

Tuve que configurarlo en “verdad”

Gracias a todos por sus respuestas o comentarios.