www update tutorial tools que packs net mvc4 mvc language instalar espaƱol asp asp.net-mvc asp.net-mvc-3 razor

asp.net-mvc - update - razor 3



ASP.NET MVC: Ayudantes Html personalizados en Razor (3)

Apéndice:

Puede obtener el mismo error o similar con @ Html.RenderPartial. En este caso, se debe al hecho de que RenderPartial representa directamente a la Respuesta, por lo que no es una cadena y debe codificarse dentro de un "bloque de código Razor":

@{ Html.RenderPartial(...); }

Sospecho que esa es una de las razones por las que Microsoft ha incluido en ASP.NET MVC el nuevo Html.Partial. Como Html.Partial devuelve una cadena, está bien escribir:

@Html.Partial

Que se ve mucho mejor. Dado que uno de los objetivos declarados de Razor es ser fácil de entender, es muy probable que así sea.

También me hace sentir, al menos, más cómodo. Sé lo que es devolver una cadena, lo hago todo el tiempo. Pero "volver a la respuesta" requiere unos cuantos ciclos cerebrales más cada vez que lo pienso.

Y encaja con el viejo adagio de que finalmente Microsoft obtiene sus productos directamente en la versión 3. EG, Access 97.

Lo cual es un símil deprimente. Porque arruinaron las cosas en la versión 4, es decir, Access 2000 ...

Tengo dificultades con Html Helpers cuando se usa con Razor. Dichos ayudantes funcionaron bien en MVC 2 con el motor de visualización de formularios web. Pero no en navaja. El error que obtengo en tiempo de ejecución es:

Compiler Error Message: CS1502: The best overloaded method match for ''System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'' has some invalid arguments Source Error: Line 1: @using Wingspan.Web.Mvc; Line 2: @Html.IncrementalMenu(MenuBlock.Site)

Expandir la demostración La salida detallada del compilador revela:

d:/.../Views/Shared/MenuTop.cshtml(2,1): error CS1502: The best overloaded method match for ''System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'' has some invalid arguments d:/.../Views/Shared/MenuTop.cshtml(2,7): error CS1503: Argument 1: cannot convert from ''void'' to ''System.Web.WebPages.HelperResult''

Eso me indica que a la máquina de afeitar no le gusta mi ayudante, IncrementalMenu, return void (que funciona bien en las vistas del motor de formulario web MVC 2).

No obtengo ningún error en el momento de la compilación, aunque la línea de código (@ Html.IncrementalMenu (...)) está subrayada en rojo con el siguiente mensaje:

Cannot implicitly convert type ''void'' to ''object''

IncrementalMenu está en el espacio de nombres Wingspan.Web.Mvc. Su firma es la siguiente:

public static void IncrementalMenu(this HtmlHelper html, MenuBlock menuBlock) { // Uses an HtmlTextWriter to render a menu from the sitemap }

Me volaron si sé lo que está mal ...

PD:

El parámetro MenuBlock es solo una enumeración que identifica cómo debería mostrarse el menú. No te preocupes por esto, ya que está bien.


Puedes llamar a tu ayudante de esta manera:

@{ Html.IncrementalMenu(MenuBlock.Site); }

Sintaxis de WebForms

<% Html.IncrementalMenu(MenuBlock.Site); %>

Simplemente llama a tu método y se ignora el valor de retorno (si hay alguno).

Código como este espera un valor de retorno y escribe el valor de retorno en la secuencia html:

@Html.YourHelper()

Sintaxis de webforms:

<%: Html.YourHelper() %>

Lo mismo, si el valor del resultado! = IHtmlString:

<%= Server.HtmlEncode(Html.YourHelper()) %>


Su ayudante de HTML debería devolver MvcHtmlString que representa el html para funcionar correctamente con Razor (y otros motores de vista que no son WebFormsViewEngine)

public static MvcHtmlString Label(this HtmlHelper html, string expression) { return MvcHtmlString.Create("<label>" + expression + "</label>"); }