2011-11-26 17 views
9

Llamo al mismo controlador muchas veces desde la vista _Layout.cshtml. Entonces, en este controlador, ¿cómo puedo descubrir en tiempo de ejecución si todavía se está procesando la misma página o si se está realizando una nueva solicitud de página?Página MVC3 - Funcionalidad IsPostback

En asp.net puede usar ispostback para resolver esto. ¿Cómo puede saber si se está realizando una nueva solicitud para una página en MVC3?

Gracias

Respuesta

17

No hay tal cosa en MVC. Tiene acciones que pueden manejar POST, GET o ambos. Puede filtrar lo que cada acción puede manejar usando los atributos [HttpPost] y [HttpGet].

En MVC, lo más cerca que puede llegar a IsPostBack es algo como esto dentro de su acción:

public ActionResult Index() 
{ 
    if (Request.HttpMethod == "POST") 
    { 
     // Do something 
    } 

    return View(); 
} 

Por lo tanto,

[HttpPost] 
public ActionResult Create(CreateModel model) 
{ 
    if (Request.HttpMethod == "POST") // <-- always true 
    { 
     // Do something 
    } 

    return RedirectToAction("Index"); 
}  
+0

Gracias, su publicación me abrió a una nueva lata de gusanos de RESTFUL. Mi HttpRequest en este caso siempre será un GET. Por lo tanto, con el atributo [HttpGet], todavía no hay forma de diferenciar si estamos al principio de la solicitud o en la solicitud. PERO supongo que no hay tal cosa en MVC3 como dices. – River

3

podría yo también sugieren que implemente como propiedad de su controlador clase base como:

protected bool IsPostback 
{ 
    get { return Request.HttpMethod == "POST"; } 
} 

-Marc