vista variable usar pasar mvc lista enviar datos controlador como asp.net-mvc view asp.net-mvc-4 base

asp.net-mvc - usar - pasar variable de controlador a vista laravel



Cambiar el tipo de vista base en MVC4 (2)

He leído una publicación sobre cómo cambiar el tipo de vista base en MVC desde el siguiente enlace:

http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx

Seguí las instrucciones pero mi página aún hereda de System.Web.Mvc.WebViewPage . No puedo acceder a ninguna propiedad definida en mi base de vistas personalizada y aparece un error en el tiempo de ejecución. Cuando uso la palabra clave @inherits , corrige.

Web.config

<pages pageBaseType="[MyNamespace].WebViewPageBase"> <namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces> </pages>

WebViewPageBase

public class WebViewPageBase : WebViewPage { public SomeType MyProperty { get; set; } public override void InitHelpers() { base.InitHelpers(); MyProperty = { foo }; } public override void Execute() { } } public class WebViewPageBase<T> : WebViewPage<T> { public SomeType MyProperty { get; set; } public override void InitHelpers() { base.InitHelpers(); MyProperty = { foo }; } public override void Execute() { } }

Vista parcial

@model TopMenuModel <div class="topMenu"> @MyProperty </div>

Pero en la publicación que he leído no hay instrucciones sobre la palabra clave @inherits . ¿Hay algo que extraño o alguna forma de hacer que esto funcione sin @inherits keyword en todas las páginas?

SOLUCIONADO

web.config archivo web.config en el directorio root no es el correcto. Cambié el tipo base en el archivo web.config en el directorio View y lo arreglé.


¿Por qué mostró dos versiones de WebViewPageBase : genéricas y no genéricas?

Solo necesitas la versión genérica:

public class MyWebView<T> : WebViewPage<T> { public SomeType MyProperty { get; set; } public override void InitHelpers() { base.InitHelpers(); MyProperty = new SomeType(); } public override void Execute() { } }

y entonces:

<pages pageBaseType="MvcApplication1.WebViews.MyWebView"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages>

Ahora dentro de sus puntos de vista podrá usar la propiedad:

@model TopMenuModel <div class="topMenu"> @MyProperty </div>

ACTUALIZAR:

Configuración paso a paso:

  1. Cree una nueva aplicación ASP.NET MVC 3 utilizando la Plantilla de Internet
  2. Agregar una vista base personalizada:

    namespace MvcApplication1 { public class MyWebView<T> : WebViewPage<T> { public string MyProperty { get; set; } public override void InitHelpers() { base.InitHelpers(); MyProperty = "Hello World"; } public override void Execute() { } } }

  3. Establezca el atributo pageBaseType en ~/Views/web.config (que no debe confundirse con ~/web.config ):

    <pages pageBaseType="MvcApplication1.MyWebView"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages>

  4. Dentro ~/Views/Home/Index.cshtml use la propiedad:

    <div> @MyProperty </div>

  5. Presiona Ctrl + F5 para ejecutar la aplicación y si todo va bien recibirás un Hello World .


El problema que tienes es porque necesitas modificar el archivo web.config de la carpeta VIEWS. Así que básicamente esta línea:

<pages pageBaseType="[MyNamespace].WebViewPageBase">

debe estar en la web.config desde su carpeta de vistas, no desde la web.config del proyecto principal. La respuesta de Darin Dimitrov lo especifica claramente, pero la gente suele pasar por alto ese detalle. Lo sé porque yo era uno de ellos. En realidad, también lo hace el artículo de Phil Haack ...