2011-03-22 20 views
5

En ASP.NET MVC que tienen un controlador que se parece de alguna manera como esto:¿Es posible cambiar la URL al devolver la Vista al mismo tiempo? Eso es sin redirigir?

flujo de trabajo
public class MyController{ 
    public ActionResult Index(){ 
     return View(new MyModel()); 
    } 
    [HttpPost] 
    public ActionResult Index(MyModel model){ 
     //do something 
     return View("RegistrationConfirmation", new ConfirmModel()); 
    } 
    [HttpPost] 
    public ActionResult RegistrationConfirmation(ConfirmModel model){ 
     //do something else 
     return View(); 
    } 
} 

del usuario que me gustaría tener está siguiendo

  • GET índice de página. Devuelve la vista Index. URL: ~/My
  • POST datos de la página de índice - devuelve la vista RegistrationConfirmation y envía al usuario a la página de la derecha ~/My/RegistrationConfirmation.
  • Usuario POST s otra información mientras que en la página RegistrationConfirmation se llama a RegistrationConfirmation para procesarlos.

Ahora mismo método de acción RegistrationConfirmation nunca es llamado porque después de volver la vista por RegistrationConfirmation Índice URL método de acción permanece ~/My por lo que el segundo mensaje es procesado por el método de acción no Index(MyModel) por RegistrationConfirmation(ConfirmModel) método de acción.

¿Cómo puedo cambiar la URL junto con el envío de la Vista para que se llame a la acción del controlador que corresponde a la vista en POST? ¿O hay alguna otra manera de garantizar que se llame al controlador correspondiente?


NOTA: He leído realmente más de 20 preguntas que parecían estar en tema antes de la publicación de éste. No creo que la respuesta perfecta a cualquiera de ellos me dará solución. Por favor, lea correctamente antes de votar para cerrar como duplicado.

+0

Html.El método de acción debería darle la flexibilidad para el método de acción apropiado que desea invocar? –

Respuesta

2

intente éste en la vista RegistationConfirmation

puede añadir fácilmente la acción y el controlador que debe ser dirigido en el comando Html.BeginnForm ...

<% using(Html.BeginForm("RegistrationConfirmation", "MyController")){%> 

    //form elements 

    <%}%> 

con esta se define exactamente qué acción y qué controlador se va a llamar

+0

Tuve un problema similar anoche. Esta respuesta es cómo lo arreglé. En BeginForm puede especificar cualquier controlador y cualquier acción para procesar su POST. – Pete

+0

Sí esto funciona. Y me gusta. – drasto

Cuestiones relacionadas