2012-08-01 31 views

Respuesta

107

Éstos son lo que considero mis directrices sobre el uso de Html.Action o Html.Partial

Html.Partial

  1. Uso Html.Partial cuando se renderiza el contenido estático o,
  2. Si van a pasar datos del ViewModel que se está enviando a la vista principal

Html.Action

  1. Uso Html.Action cuando realmente se necesita para recuperar datos adicionales desde el servidor a poblar la vista parcial

Básicamente, si es estática, utilice Html.Partial(). Si es dinámico, datos independientes del modelo, use Html.Action(). Probablemente haya más escenarios, pero esto le dará una buena idea de dónde/cómo ir. Html.RenderPartial() y Html.RenderAction() son intercambiables para las funciones mencionadas anteriormente.

+0

Gracias HTML.Action hizo el truco para mí. –

+0

Buena explicación +1 para ti. – Pamma

+0

Tenga en cuenta que si la aplicación tiene múltiples ciclos a través de controladores, puede hacer que sea un poco más difícil razonar lo que ocurre para una acción determinada, ya que Html.Action() regresa a un controlador potencialmente diferente. Dependiendo de sus implementaciones/dependencias, esto puede ser costoso también, y [filters] (http://msdn.microsoft.com/en-us/library/gg416513 (vs.98) .aspx) puede ser una alternativa en algunos casos. – Cornelius

61

Html.Partial: hacer Un Vista parcial sin golpear una acción de controlador en primer lugar. Ver: Partial Views

Html.Action Llamar a un controlador de Acción , que puede devolver una visión/vista parcial (o tal vez no, podría lanzar una HttpNotFound o volver JSON, u otras cosas).

¿Su menú requiere un modelo de vista, o es estático?

Si se trata de un menú estático, Html.Partial se ajustará a sus necesidades. Coloque el contenido del menú estático dentro de la vista parcial y llame al Html.Partial donde desea que se muestre.

Si el menú se está generando un modelo de vista, se puede utilizar ya sea Html.Partial o Html.Action:

encadenar el modelo de vista utilizando Html.Partial:

public class MenuViewModel { 
    // menu data goes here 
} 

public class GeneralViewModel : MenuViewModel { 
    // general view info goes here 
} 

public ActionResult Index() { 
    return View(new GeneralViewModel()); 
} 

// View Code 
@model GeneralViewModel 
<div>@Html.Partial("_partialName", model)</div> 

Aquí pasamos un modelo de vista completo para la vista y la vista llamadas Parcial y manos su modelo fuera de la vista parcial.

** Separar el modelo usando Html.Action: **

public ActionResult Index() { 
    return View(new GeneralViewModel()); 
} 

public ActionResult MenuView() { 
    return PartialView(new MenuViewModel()); 
} 

// View Code 
@model GeneralViewModel 
<div>@Html.Action("MenuView")</div> 

aquí la vista llama a la acción del controlador MenuView que crea un nuevo modelo de vista y lo pasa a la parcial.

0

Caso 1: Utilice el método @Html.Partial() si tiene diferentes vistas parciales con diferentes modelos.

Caso 2: Utilice el método @Html.Action() si tiene una vista parcial con un modelo, pero con datos diferentes.

Cuestiones relacionadas