2012-11-20 19 views
5

Ho scritto un metodo parziale come questo:ASP.NET MVC 4 vista parziale non funziona

public ActionResult _StatePartial() 
     { 
      ViewBag.MyData = new string[] { "110", "24500" }; 
      return View(); 
     } 

e rendono _StatePartial vista in _Layout pagina:

@Html.Partial("_StatePartial") 

Questo è il mio codice vista parziale:

@{ 
    string[] Data = (string[])ViewBag.MyData; 
} 
<div id="UserState"> 
     Reputation: @Html.ActionLink(Data[0], "Reputation", "Profile") | 
     Cash: @Html.ActionLink(Data[1], "Index", "FinancialAccount") 
</div> 

Ma quando si esegue questo progetto, il metodo _ StatePartial non viene richiamato e ViewBag sempre null.

Server Error in '/' Application. 
Object reference not set to an instance of an object. 

Si noti che questi parametri non sono il campo e il calcolo del mio modello chiamando un metodo di servizio Web. ma ho fissato costantemente questo valore nella mia domanda.

Cosa posso fare per questo? Qualche idea per passare i parametri alla vista parziale? Grazie.

risposta

9

La vostra chiamata:

@Html.Partial("_StatePartial") 

renderanno la vista, ma non chiamerà l'azione. Lo utilizzeresti solo se stavi raccogliendo tutti i tuoi dati di visualizzazione nell'azione della pagina principale. Nel tuo caso è necessario utilizzare questo:

@Html.Action("_StatePartial") 

Questo chiamerà l'azione prima di recuperare ed eseguire la vista.

+0

Thanks :) Funziona. – Mojtaba

1

anche:

return View(); 

è per la restituzione vista con layout. Hai bisogno di:

return PartialView(); 

e consiglio l'uso questo:

public ActionResult StatePartial() 
{ 
    ViewBag.MyData = new string[] { "110", "24500" }; 
    return View("_StatePartial"); 
} 

ma meglio usare modelli fortemente tipizzati, non ViewBag

Problemi correlati