2010-01-02 11 views
6

Tengo una acción de creación en mi controlador para HttpPost. dentro de esa acción inserto el registro en el archivo db, y luego devuelvo una vista especificando un nombre de acción diferente, porque quiero llevar al usuario a otro lugar, como a la vista de detalles del registro que acaba de crear, y paso el modelo actual, así que no tengo que volver a cargar los datos que acaban de ingresar. Desafortunadamente, la url en la barra de direcciones todavía muestra la acción de creación original.asp mvc: especificar un nombre de vista no cambia la url

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    //Go to details view, pass the current model 
    //instead of re-loading from database 
    return View("Details", model); 
} 

¿Cómo puedo obtener la URL para mostrar "http://myapp/MyController/Details/1", en lugar de "http://myapp/MyController/Create/1"? ¿Es posible, o tengo que hacer una redirección? Espero poder evitar la redirección ...

Respuesta

4

Tienes que hacer un redireccion para cambiar la URL en el navegador.

El nombre de la vista que ingresa solo le dice a MVC qué vista mostrar. Es un detalle de implementación de su aplicación.

El código sería algo como:

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    return RedirectToAction("Details", new { id = model.ID }); 
} 

Una de las razones por las que desea hacer una redirección aquí es para que el usuario puede pulsar el botón Actualizar en el navegador y no conseguir ese molesto " le gustaría publicar los datos de nuevo "diálogo.

Este comportamiento a menudo se denomina "Post-Redirect-Get" o "PRG" para abreviar. Ver el artículo de Wikipedia para más información sobre PRG: Post/Redirect/Get

Cuestiones relacionadas