Mostrando entradas con la etiqueta MVC. Mostrar todas las entradas
Mostrando entradas con la etiqueta MVC. Mostrar todas las entradas

jueves, 7 de noviembre de 2019

vcard, acentos y eñes.

El problema

Creas una página web desde donde pueden descargarse archivos VCard para importarlos y crear contactos en Outlook.
Todo funciona bien salvo que tildes, eñes u otros carácteres  no usados en inglés no se visualizan bien.
Por ejemplo Dª Estefanía se importa como D? Estefan?a

Contexto

El problema me apareció en un desarrollo C# MVC ASP.NET usando la librería MixERP.Net.VCards pero la solución tiene aplicación en otros contextos,

Solución

Hay que codificar con "ISO-8859-1".

Usando un controlador ASP.NET MVC el código es:

        [HttpPost]
        public ActionResult VCard(Simple cto)
        {
            var _VCard = cto.GetComplejo().getVcard(); //genera Vcard en formato MixERP.Net.VCards
            Response.Clear();
            Response.AddHeader(
                $"Content-Disposition",
                $"attachment; filename={_VCard.FormattedName }.vcf;"
                );
            var serializedvCard = _VCard.Serialize();
            return File(
                Encoding.GetEncoding("ISO-8859-1").GetBytes(serializedvCard),
                "text/x-vcard; charset=ISO-8859-1"
                );
        }

jueves, 19 de abril de 2018

Dos Helpers Razor para postear diccionarios en forms y Json

Descripción

El modelo de una página Razor incluye propiedades del tipo diccionario que queremos postear como campos ocultos o mediante Json.

Solución

Para camposOcultos

@helper OcultoDictionary(Dictionary<int, int> dicc, string nombre)
    {
        var i = 0;
        foreach (var d in dicc)
        {
            <input type="hidden" value="@d.Key" name="@string.Format("{0}[{1}].Key",nombre,i)" />
            <input type="hidden" value="@d.Value" name="@string.Format("{0}[{1}].Value",nombre,i)" />
            i++;
        }
}

Ejemplo de resultados

<input type="hidden" value="1" name="ExperienciasEspecificas[0].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[0].Value" />
<input type="hidden" value="2" name="ExperienciasEspecificas[1].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[1].Value" />
<input type="hidden" value="3" name="ExperienciasEspecificas[2].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[2].Value" />

Para Json

@helper JsonDiccionario(Dictionary<int, int> dic, string n)
    {
        var i = 0;
        foreach (var d in dic)
        {
            @Html.Raw($"'{n}[{i}].Key':{d.Key},")
            @Html.Raw($"'{n}[{i}].Value':{d.Value},")
            i++;
        }
}

Ejemplo de resultados

{
...
'ExperienciasEspecificas[0].Key':1,
'ExperienciasEspecificas[0].Value':1,
'ExperienciasEspecificas[1].Key':2,
'ExperienciasEspecificas[1].Value':1,
'ExperienciasEspecificas[2].Key':3,
'ExperienciasEspecificas[2].Value':1,
...
}

miércoles, 3 de septiembre de 2014

Scripts.Render("~/bundles/modernizr") y error referencia a objeto no establecida.....

Contexto

ASP.NET MVC

Síntomas

Recibes un error Scripts.Render("~/bundles/modernizr") que desemboca en Referencia a objeto no establecida como instancia de un objeto.

Causa

En la vista o en sus layouts haces referencia a una propiedad dinámica del viewbag que no has establecido previamente.


jueves, 26 de junio de 2014

No hay constructor sin parámetros definido para este objeto

Enunciado:

Creas un modelo, una acción etiquetada httpPost y las vistas correspondientes.
Cuando realizar la primera prueba tienes el error:
No hay constructor sin parámetros definido para este objeto

Solución:

Una vez mas te has olvidado de crear un constructor sin parámetros para el modelo.

Ejemplo:

La acción
        [HttpPost()]
        public ActionResult Guardar(UsuarioEdicion datos)
        { ....
En el modelo falta el constructor marcado en rojo

Public class UsuarioEdicion
{
Public UsuarioEdicion(){}
........


martes, 17 de junio de 2014

@Html.ActionLink y ?length=n

Sintomas

En Razor escribes algo así como:
@Html.ActionLink("Texto del enlace", "Accion", "NuevoControlador", new {id=1})
Que te debia sacarte del contexto "ControladorActual" para llevarte a "NuevoControlador"
Por tanto esperas que se genere:
<a href="http://www.blogger.com/miweb/NuevoControlador/Acccion/1" >Texto del enlace</a>
Pero se genera:
<a href="http://www.blogger.com/miweb/ActualControlador/Accion?length=21" >Texto del enlace</a>

Solución:

Reemplaza por:
@Html.ActionLink("Texto del enlace", "Accion", new {Controller="NuevoControlador", id=1})
Y listo.

Comentario:

Me ha pasado tantas veces cada vez que he vuelto a usar el html.actionlink que al final lo he escrito para no olvidarme.

jueves, 13 de marzo de 2014

Añadir atributos HTML en @html.EditorFor

Enunciado:

Quieres añadir atributos HTML como la clase CSS en el código generado por el Helper @html.EditorFor

Solución :

Desde MVC5 se puede hacer pero de una forma distinta a la que se sigue en los otros helper. En lugar de usar un parametro han reutilizado el parametro addionnalViewData y han añadido un nuevo ViewData htmlAttributes.
Mejor verlo con un ejemplo:

@Html.EditorFor(model => model.Dominio,
                             new { 
                                       htmlAttributes = new {
                                                                        @class = "form-control",
                                                                        @maxlength = "50",
                                                                        @placeholder = "Nuevo dominio"
                        } })


viernes, 17 de enero de 2014

Problema al actualizar Razor de la versión 2 a la 3

Sintomas:

[A]System.Web.WebPages.Razor.Configuration.HostSection no puede convertirse en [B]System.Web.WebPages.Razor.Configuration.HostSection. El tipo A se origina a partir de 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' en el contexto 'Default' en la ubicación 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. El tipo B se origina a partir de 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' en el contexto 'Default' en la ubicación 'C:\Users\arturosoler\AppData\Local\Temp\Temporary ASP.NET Files\root\698c7daf\30eb994\assembly\dl3\81df2216\2827e9b5_7213cf01\System.Web.WebPages.Razor.dll'.

Solución:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Fuente de la solución

http://blog.jongallant.com/2013/09/razorconfigurationhostsection-issue.html#.UtkZdBB5PGA

domingo, 20 de enero de 2013

jquery.mvc.net y vb.net

Enunciado

En un proyecto web mvc instalas desde nuget jquery.mvc.net y nada funciona

Solución

Cambia todas las  plantillas, controladores, startapp a vb.net. Estan en c#

Comentario

Si quieres el código posteame un comentario y lo publicaré.  (Voy corto de tiempo)