Páginas

2011/10/25

FormCollection vacío en ASP.NET MVC

Tenía mi form en html bien estructurado: su submit, sus campos tipo texto... pero al pasarlo a mi Controller parametrizado con FormCollection de la siguiente forma:

[HttpPost]
public ActionResult NuevoTrabajo(FormCollection valoresForm)
{
...
}

me dí cuenta que valoresForm no contenía ningún elemento!

Encontré la solución de este, sinceramente, problema sencillo: a los campos les faltaba la etiqueta 'name', sin 'name' no hay paso de valores desde un formulario aunque tengas los identificadores bien puestos. Lo dice la normativa de HTML (http://www.w3.org/TR/html401/interact/forms.html#h-17.2).

No es lo mismo

<input type="text" id="micampo" /> (incorrecto)

que

<input type="text" id="micampo" name="micampo" />
  (correcto)

2011/06/27

JSFIDDLE

Si quieres incluir código Javascript en tu página y ver su resultado al mismo tiempo, una forma elegante nos la ofrece JsFiddle (http://jsfiddle.net/)

Para ver un ejemplo: http://paulirish.com/2011/requestanimationframe-for-smart-animating/

2011/06/22

DNI Electrónico, PCKS#11 y Firefox

Para poder usar el DNI Electrónico en Firefox, haremos lo siguiente:

a) Dentro de Firefox ir a Herramientas | Opciones... | Avanzado | Cifrado (es una pestaña) y pulsar el botón Dispositivos de Seguridad.

b) Aquí pulsaremos el botón Cargar y escribiremos como nombre de módulo 'DNIe modulo PKCs#11' por ejemplo, pulsaremos el botón Examinar y cargaremos el archivo c:\windows\system32\UsrPkcs11.dll

2010/05/01

La lista de los proyectos en Visual Studio

Para tratar los proyectos que tenemos en Visual Studio debemos hacerlo desde la dirección del registro de windows HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList

Hay que tener en cuenta que esta lista está en orden consecutivo y si borramos, por ejemplo la entrada 6 y tenemos 8 proyectos, solamente se verá hasta el proyecto 5.

2009/11/20

Sacar un XSD desde un XML

Pasar sacar un esquema inferido desde un archivo XML en .NET (C#), podemos hacer lo siguiente:

(Aplicación de consola)

XmlReader _reader = XmlReader.Create(_pathFicheroXML);
XmlSchemaSet _schemaSet = new XmlSchemaSet();
XmlSchemaInference _schema = new XmlSchemaInference();
_schemaSet = _schema.InferSchema(_reader);
foreach (XmlSchema _schemaObj in _schemaSet.Schemas())
{
  _schemaObj.Write(Console.Out);
}

2009/11/18

El problema de mostrar los certificados del almacén CertificateAuthority

Si alguna vez habéis intentado sacar los certificados por almacén, es posible que hayáis tenido problemas al mostrar el almacén CertificateAuthority en concreto.

Para sacar el listado de certificados yo hacía lo siguiente:

private Array listaDeAlmacenes()
{
    return Enum.GetNames(typeof(StoreName));
}

private IList certificadosPorAlmacen(string almacen)
{

        IList listaCertf = new List();

        try
        {
            X509Store store = new X509Store(almacen, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);

            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;

            foreach (X509Certificate2 certificado in collection)
            {

        ….. (etc)
   

listadeAlmacenes() devuelve en este caso, un array de strings de 8 elementos:


[0]: "AddressBook"
[1]: "AuthRoot"
[2]: "CertificateAuthority"
[3]: "Disallowed"
[4]: "My"
[5]: "Root"
[6]: "TrustedPeople"
[7]: "TrustedPublisher"


Cada una de estas cadenas se pasan al método certificadosPorAlmacén() y todo funciona bien exceptuando el caso de CertificateAuthority que no devolvía nada.

La solución la encontré rascando por internet y concretamente en: http://www.koders.com/csharp/fid7DCF8CE37E137FCC9549AD6DC0FCB4BEA690F50F.aspx

Este enlace nos lleva a la clase Mono.Security.X509 donde podemos ver el desarrollo que se ha hecho de la clase similar de Microsoft.

Me llamó la atención este método:

private static string StoreNameToString (StoreName sn)
        {
            switch (sn) {
                case StoreName.CertificateAuthority:
                    return "CA";
                default:
                    return sn.ToString ();
            }
        }

Pues bien, aquí está la solución: solamente hace falta cambiar el nombre de "CertificateAuthority" a "CA" para que funcione.

 
Sabiendo esto, cambié mi método de la siguiente forma:


private List listaDeAlmacenes()
    {
       
        List lista=new List();

        foreach (string sn in Enum.GetNames(typeof(StoreName)))
        {
            lista.Add(sn);
        }

        //Aquí se realiza el cambio
        lista[Array.IndexOf(lista.ToArray(), "CertificateAuthority")] = "CA";


        /* También valdría:
         *
        lista = Enumerable.Union(
            lista.Where(p => p != "CertificateAuthority"),
            Enumerable.Repeat("CA", 1)).
            ToList();
        */

        /* Y también:
        if (lista.Contains("CertificateAuthority"))
        {
            lista.Remove("CertificateAuthority");
            lista.Add("CA");
        }
        */

        return lista;
    }

2009/09/29

Número a literal en javascript

Hace tiempo estuve trabajando en una empresa que ofrecía sus servicios de programación a notarías.
Es bien sabido que en los documentos notariales toda cifra o número viene acompañado de su literal.
El programa original lo hice en lenguaje Fox  y lo he reconvertido y reescrito en javascript para que pueda ser aprovechado en el mundo web.

Bien, para utilizarlo debemos incluir la librería aLiteral.js que está alojada en https://github.com/17cosas/aLiteral.js , y crear un objeto aLiteral pasándole como argumento el número que queramos convertir, de esta forma:


var numeroLiteral = new aLiteral("23");
alert(numeroLiteral); // veintitrés


Un ejemplo más completo como pasar a literales el rango 0-100, podemos hacer lo siguiente:

                    function empieza()
                    {
                        for (var i=0; i<101; i++){
                            document.write(new aLiteral(i));
                        }
                    }
                    window.onload = empieza;


Cuyo resultado será:

cero
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
once
doce
trece
catorce
quince
dieciséis
diecisiete
dieciocho
diecinueve
veinte
veintiuno
veintidós
veintitrés
veinticuatro
veinticinco
veintiséis
veintisiete
veintiocho
veintinueve
treinta
treinta y uno
... etc (hasta 'cien')



Enlaces:

http://es.wikipedia.org/wiki/Nombres_de_los_n%C3%BAmeros_en_espa%C3%B1ol

MsiInv o cómo obtener información del software instalado en tu ordenador (en Windows)

Pues como dice el título, si quieres saber realmente qué software tienes instalado en tu computadora con el sistema operativo Windows, recom...