2012-06-22 18 views
8

que tienen un modelo de vista estoy unión a un punto de vista:ASP.NET MVC ¿una mejor manera de publicar la ID del modelo?

ProductViewModel model = Mapper.Map<Product, ProductViewModel>(product); 
return View(model); 

La vista (y modelo de vista) se utiliza para editar una Product por lo ProductViewModel tiene una propiedad de identificación que corresponde a la ID en la base de datos.

y enviar el ID de vuelta al controlador que estoy haciendo esto en mi formulario a la vista:

@Html.HiddenFor(x => x.Id) 

A pesar de que esto funciona - Me preguntaba si había una mejor manera de fijar el ¿ID de vuelta al controlador? ¿Valores de ruta tal vez? o es este un patrón/enfoque bastante estándar?

Respuesta

11

Si tengo una acción GET que incluye la id en mi ruta: /Products/Edit/1 continuación, por lo general mantener como un valor de rutas:

[HttpPost] 
public ActionResult Edit(int id, EditProductViewModel model) 

Esto es puramente una preferencia de la mina, sin embargo. No hay una forma correcta o incorrecta de hacerlo.

Lo bueno de este método es que ya no necesita pasarlo usando un valor Oculto ya que es parte de la URL. En realidad, si lo pasas con un valor oculto, creo que será ignorado.

alternativa, puesto que la identificación es parte de la ruta, que ni siquiera necesita tener un parámetro independiente:

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

public class EditProductViewModel 
{ 
    public int Id { get; set; } 
} 

Una vez más, esto es puramente una cosa preferencia.

+0

No creo que los campos ocultos sean ignorados, parecen estar mapeados al objeto modelo al igual que un campo visible. – Greg

+0

@Greg Quise decir si tuvieras un campo oculto llamado 'id' y tuvieras un valor de ruta llamado' id' que ganaría el valor de la ruta. – Dismissile

+0

¡Ah, ya te tengo! – Greg

1

Creo que la respuesta es, depende.

¿Está editando y publicando su objeto entero? Si es así, sugerí publicar la ID como parte del modelo:

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

Lo cual creo que es una cosa perfectamente válida para hacer. Sin embargo, ten cuidado Si el recurso que se está editando es un recurso protegido, asegúrese de validar que el usuario tenga los privilegios correctos.

Si se trata de una edición parcial, tal vez sólo editar un comentario a través de una llamada Ajax probablemente estaría más tentado a hacer:

[HttpPost] 
public ActionResult Edit(int id, string comment) 

Como crear un modelo en ese escenario me gustaría ver como una exageración .. . privilegio problema sigue siendo válida aunque :)

dicho todo esto, no soy un experto en mí :)

Por cierto ... no creo que haya nada de malo en el campo oculto, lo uso todo el tiempo. Sin embargo, es una llamada ajax que puede no ser necesaria, ya que sería parte de la publicación de una llamada ajax.

Cuestiones relacionadas