Ho una lista di azioniMVC3 Perché viene visualizzato l'errore "Azioni secondarie non è consentito eseguire azioni di reindirizzamento"?
//[HttpGet] (will come back to that!)
public ViewResult List(int page = 1)
{
//blah blah blah
return View(viewModel);
}
A suo parere rendiamo azione:
@{
Html.RenderAction("UpdateSearch");
}
definizioni di azione:
[ChildActionOnly]
[HttpGet]
public PartialViewResult UpdateSearch()
{
// do something and display a form in view
return PartialView(so);
}
[HttpPost]
public RedirectToRouteResult UpdateSearch(Options searchOptions)
{
// do something and redirect to List
return RedirectToAction("List");
}
e sto ottenendo: le azioni del bambino non sono autorizzati a eseguire eccezioni di azioni di reindirizzamento ogni volta che qualcuno invia il modulo. Sono nuovo di MVC3, ma sembra che il reindirizzamento sia anche un POST, perché se [HttpGet] sopra il metodo List è commentato "la risorsa non può essere trovata" accade.
Come cambio il metodo Http al reindirizzamento o sto facendo qualcosa di sbagliato? Ho provato a Bing, ma senza successo.
Questo avrebbe senso, ma il reindirizzamento nel mio esempio non è fatto dal metodo con annotazioni [ChildActionOnly]. Il problema è che quando [HttpPost] UpdateSearch reindirizza a List, reindirizza con POST, quindi il metodo [HttpPost] è (cercando di essere) utilizzato per la generazione parziale in vista. Potrei usare RouteValueDictionary per cambiarlo? –
Mostraci anche il contenuto della vista parziale. Il problema risiede probabilmente nella definizione della route sbagliata in BeginForm ma non posso dirlo senza vedere la vista. –
Hai ragione. Per risolvere il problema, è sufficiente aggiungere il parametro azione per il metodo BeginForm in vista UpdateSearch (Get, versione Bambino) in modo un cambiamento da: /@ utilizzando (Html.BeginForm()) { a: /@ utilizzando (Html.BeginForm ("UpdateSearch")) { risolto il problema. Sei in grado di spiegare perché? –