2012-01-03 23 views
5

Estoy tratando de hacer una vista parcial en mi aplicación y no pude mostrar el valor. Así es como se ve mi Vista.Cómo renderizar Vista parcial en MVC3

Índice Mi Vista principal

<div id="RPPricingNameModel"> 
    @Html.Partial("RPPricingPlanNames") 
</div> 
<script type="text/javascript"> 
    $("#RPPricingNameModel").load("/Home/GetPlanNameModel");  
</script> 

Vista parcial

@model PlanNameModel  
<table style= "vertical-align:top; left:0px; top:0px; position:absolute; border-width:1px; border-style:solid; border-color:Green; width:130px; text-align:left;">  
    <tr> 
     <td style=" font-size:15px; font-weight:bold; color:Black;">    
      @Model.Header 
      <div>    
        @Html.LabelFor(x => x.Header)    
      </div> 
     </td> 
    </tr> 
<table> 

Aquí es el controlador que devuelve la vista.

public ActionResult GetPlanNameModel() 
{ 
    PlanNameModel planNameModel = new PlanNameModel(); 
    planNameModel.Header = "Plans"; 
    //return View(planNameModel); 
    return PartialView(planNameModel); 
} 

Aquí es el código para el modelo

public class RPPricingPlanNameModel 
{ 
    public string Header { get; set; } 
} 

Cuando trato de mostrar el valor de TD, que no muestra nada. ¿Puedes ayudarme con esto?

Respuesta

7

Si todo lo que estamos tratando de hacer es usar partialViews y no específicamente cargarlos dinámicamente con jQuery, por favor, eche un vistazo a mi respuesta a esta pregunta, y probablemente debería resolver su problema:

MVC3 Partial Views

Todo lo que tiene que hacer es crear una ViewModel para su índice que contiene todos los objetos que su vista (s) parcial necesitan

controlador ActionMethod:

public ActionResult Index() 
{ 
    PlanNameModel planNameModel = new PlanNameModel(); 
    planNameModel.Header = "Plans"; 
    ViewData.Model = new IndexVm{ PlanNameModel = planNameModel }; 
} 

modelo de vista:

public class IndexVm 
    { 
    public PlanNameModel PlanNameModel { get; set; } 
    } 

Índice Ver

@model IndexVm 

@*Whatever index code you have*@ 

@Html.Partial("PlanPartial", Model.PlanNameModel) 

parcial Ver

@model PlanNameModel 

<div>@Model.Header</div> 
+0

Estoy un poco confundido. ¿Puedes explicarlo más? –

+0

Oye, descubrí esto hasta ahora de la depuración.Puede ser que desencadene algo para resolver esto. Puse una alerta en la función .load. Hace que mi Vista parcial y esa vez el modelo esté vacía. entonces el valor será nulo. Luego, la alerta me dice que ejecuta el script java y obtiene los valores llamando al método del controlador. Pero después de eso, carga la página en lugar de volver a mostrar la vista parcial con nuevos valores de modelo. ¿Obtienes la secuencia? Si puedo renderizar la vista parcial después del método del controlador, entonces funciona. ¿¿¿¿Algunas ideas???? –

+0

@VivekPatel he añadido una explicación más detallada de mi respuesta –

1

parece que se echa en falta el selector que busca en su selector de jQuery

es necesario agregar:

<div id="RPPricingNameModel"></div> 

a su DOM

también su @ m.Header debería ser @Model.Cabecera

y finalmente su javascript para cargar la vista parcial no debe ser en su visión parcial, que debería estar en la vista principal que se quiere cargar la vista parcial en

+0

Lo intento así. No está funcionando para mi. Está mostrando el valor "Encabezado" en lugar del valor real "Planes" que asigno a Model.Header. –

+0

Intenté eso también. Se movió el Javascript al Index.cshtml principal y se cambió el m.Header a @ Model.Header. Ahora obteniendo una excepción de referencia nula. –

+0

¿Qué sucede si coloca un punto de interrupción en GetPlanNameModel()? ¿Está llegando allí? –

0

reemplazar su índice con:

<div id="RPPricingNameModel"></div> 

<script type="text/javascript"> 
    $(function(){$("#RPPricingNameModel").load("/Home/GetPlanNameModel");}); 
</script> 

la referencia nula es causada por la llamada inicial a su parcial por

@Html.Partial("RPPricingPlanNames") 

sin el modelo requerido

+0

Ahora estoy obteniendo '' como resultado en lugar de cualquier valor. ¿Cómo puedo eliminar ese error de referencia nulo? –

+0

una sugerencia más: reemplazar la carga con obtener –

+0

Funciona bien :( –

0

Envolver el $("#RPPricingNameModel").load("/Home/GetPlanNameModel"); dentro del documento listo para que sólo se ejecutará después de la dom completa se carga

$(function(){ 

$("#RPPricingNameModel").load("/Home/GetPlanNameModel"); 

}); 
+0

que ya está cubierta por mi respuesta, eso no parece ser el problema desafortunadamente –

+0

Esto parece bastante simple pero de alguna manera no puedo hacer que esto funcione. :( –

Cuestiones relacionadas