vistas vista varias una renderbody página pasar para paginacion pagina net método mvc multiples modelo misma llamando llamado diseño datos crear controlador asp acciones asp.net-mvc

asp.net-mvc - vista - pagination mvc 5



Métodos de extensión de vista de ASP MVC Razor, ¿cómo crear métodos de vista ''globales''? (4)

Estoy usando Razor view con Asp mvc preview 3

Estoy tratando de crear algunos métodos que me gustaría que estén disponibles directamente en las vistas. Estos no son realmente métodos de ayuda de HTML, así que no creo que extender HtmlHelper tenga sentido.

Mi objetivo, ser capaz de llamar a métodos en la vista, es decir,

@HelloWorld(); vs @Html.HelloWorld()

Puedo hacer que Html.HelloWorld funcione creando un método de extensión en HtmlHelper

public static class HtmlExtensions { public static string HelloWorld(this HtmlHelper helper) { return "Hello"; } }

Me gustaría hacer lo mismo pero para la vista; Mi problema: ¿qué tipo de objeto es la vista?

Nota: Pude hacer que esto funcionara al definir los métodos en la página .cshtml

@functions { public string HelloWorld() { return "Hello"; } } @HelloWorld() @* now this works *@

Entonces intenté poner este código en mi archivo _viewstart.cshtml pensando que estaría disponible en todas las vistas pero no estaba

Si supiera de qué tipo de vista era la vista, creo que podría extenderse fácilmente, cualquier ayuda agradecida.


Como han comentado otros, Razor Views finalmente hereda de WebViewPage:

public abstract class WebViewPage<TModel> : WebViewPage

Por lo tanto, simplemente puede escribir sus métodos de extensión para WebViewPage sin crear una nueva clase base o cambiar los archivos de configuración, lo que ha sido sugerido por otras respuestas. Por ejemplo:

public static class WebViewPageExtensions { public static string HollowWorld(this WebViewPage wvp) { return "Memento mori"; } }

Agregue una declaración usando ese espacio de nombres a su Vista y luego:

<p>@this.HollowWorld()</p>


La clase base predeterminada para las vistas de Razor se especifica en el Web.config ubicado en el directorio de vistas. Por lo general es:

<pages pageBaseType="System.Web.Mvc.WebViewPage">

No lo he intentado, pero sugeriría heredar de esta clase base y agregar su propia funcionalidad, y luego ajustar el web.config en consecuencia.


La mejor manera de llamar a un método con argumentos usando un motor de afeitar es usar ayudantes. Ejemplo: le permite tener un ayudante @MakeNote (contenido de cadena)

Luego, en la página cshtml solo necesita llamar a @MakeNote ("Hola") y debería estar bien.

Me estaba volviendo loco cuando estaba teniendo problemas, entonces Google me envió a esta página, pero no me ayudó. Intentaba cargar contenido en html <select> con L2E usando la afeitadora.

El secreto es crear un ayudante en app_code y luego usarlo con cshtml.


Resulta que el tiempo de ejecución de Asp va a definir el método Execute en el tiempo de ejecución, por lo que la clase base de vista personalizada también debe ser abstracta.

using System; using System.Web.Mvc; namespace MyMvcWebApp.Extensions { public abstract class ViewBase<TModel> : System.Web.Mvc.WebViewPage<TModel> where TModel : class { // now this will be available in any view @HelloWorld() public string HelloWorld() { return "Hello from the ViewBase class"; } } }

esto debería funcionar con vistas fuertemente tipadas, parece que con la maquinilla de afeitar todas las vistas están tipificadas fuertemente, cuando no se define el tipo ''dinámico'' se usa y ese es el tipo fuerte

también, como dijo Clicktricity, a continuación, actualice el web.config (el que está en el directorio de Vistas)

<pages pageBaseType="MyMvcWebApp.Extensions.ViewBase">