2013-04-25 13 views
23

Qualcuno sa se è possibile verificare se esiste una vista parziale all'interno di una estensione HtmlHelper?Verificare se esiste una vista (parziale) da HtmlHelperMethod

so che è possibile da un controller utilizzando il seguente:

private bool ViewExists(string name) 
{ 
    ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null); 
    return (result.View != null); 
} 

Fonte: Does a View Exist in Asp.Net MVC?

Ma non si può fare quanto sopra in un aiutante, in quanto non si ha accesso al contesto del controller. Qualche idea su come fare questo?

risposta

28

Ma non è possibile fare quanto sopra in un helper, poiché non si ha accesso al contesto del controller.

Oh sì, si ha accesso:

public static HtmlString MyHelper(this HtmlHelper html) 
{ 
    var controllerContext = html.ViewContext.Controller.ControllerContext; 
    var result = ViewEngines.Engines.FindView(controllerContext, name, null); 
    ... 
} 
+0

che dire quando la tua vista parziale si trova all'interno di un'altra sottocartella personalizzata all'interno della cartella condivisa! ( – Ciwan

9

Per completezza, il modo per trovare una vista parziale, in realtà è la seguente.

public static HtmlString MyHelper(this HtmlHelper html) 
{ 
    var controllerContext = html.ViewContext.Controller.ControllerContext; 
    ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, name); 
    ... 
} 

E assicurarsi di includere l'estensione della vista; Cshtml for Razor o Aspx per i motori di visualizzazione Webform.

+0

non funzionerà anche quando le tue viste parziali si trovano all'interno di una sottocartella personalizzata all'interno della cartella condivisa. – Ciwan

+0

@Ciwan devi aggiungere il percorso per la sottocartella, ad esempio: ViewEngines.Engines.FindPartialView (controllerContext, "subfolderpath /" + name); –

Problemi correlati