Categories
.NET AJAX ASP.NET

Videos sobre Atlas

Para los interesados, Luis Abreu publicó unos cuantos videos básicos sobre la utilización de Atlas, también está disponible el código fuente de los ejemplos mostrados en éstos.

Categories
.NET AJAX ASP.NET

Script#

Script#, al igual que Google Web Toolkit, permite generar código javascript, utilizando en este caso cualquier lenguaje compatible con el .NET Framework.

csharp:

// Demo.cs
using System;
using ScriptFX;
using ScriptFX.UI;

namespace HelloWorld {

    public class Demo : IScriptlet {

        private Button _okButton;
        private XMLHttpRequest _request;

        public void Start() {

            _okButton = new Button(Document.GetElementById("okButton"));
            _okButton.Click += new EventHandler(this.OnOKButtonClick);
        }

        private void OnOKButtonClick(object sender, EventArgs e) {
            Callback completedCallback = new Callback(this.OnRequestComplete);

            _request = new XMLHttpRequest();
            _request.Onreadystatechange = Delegate.Unwrap(completedCallback);
            _request.Open("GET", "Hello.ashx", true);
            _request.Send(null);
        }

        private void OnRequestComplete() {
            if (_request.ReadyState == 4) {
                _request.Onreadystatechange = Function.Empty;
               
                Window.Alert(_request.ResponseText);
            }
        }
    }
}
 

En la página de demostración, lo único que se tiene que hacer es registrar la clase "HelloWorld.Demo".

html:

<!-- Demo.aspx -->
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>Demo Script#</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <input type="button" id="okButton"
        value="OK" />

    </div>
   
    <nStuff:Scriptlet runat="server"
      ScriptAssembly="HelloWorld"
      ScriptletType="HelloWorld.Demo" />

    </form>
</body>
</html>
csharp:

<%@ WebHandler Language="C#" Class="HelloHandler" %>

// Handler.ashx: Se encarga de procesar la petición.

using System;
using System.Web;

public class HelloHandler : IHttpHandler {

    public bool IsReusable {
        get {
            return true;
        }
    }

    public void ProcessRequest(HttpContext context) {
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        string greeting = String.Empty;
        string name = request["name"];
        if (!String.IsNullOrEmpty(name))
        {
            greeting = "Hello " + HttpUtility.HtmlEncode(name) + "!";
        }
        else
            greeting = "Hello from server";

        greeting += " - Server time: " + DateTime.Now.ToShortTimeString();
     
        response.ContentType = "text/plain";
        response.Write(greeting);
    }
}

xml:

<!-- Web.config -->
<?xml version="1.0"?>
<configuration>

  <system.web>
    <pages>
      <controls>
        <add tagPrefix="nStuff" assembly="nStuff.ScriptSharp.Web" namespace="nStuff.ScriptSharp" />
      </controls>
    </pages>
  </system.web>

</configuration>

Pueden descargar el compilador de Script# desde http://www.nikhilk.net/Content/Samples/ScriptSharp.zip o ver un video demostrativo en http://www.nikhilk.net/Content/Video/ScriptSharpIntro.wmv

Categories
.NET Artí­culos ASP.NET JavaScript

Subiendo múltiples archivos con .NET

Debido a algunos comentarios que recibí en la entrada "Enviar y/o subir multiples archivos adjuntos al estilo GMail" (varios se perdieron por problemas con el hosting) y algunos mails que he recibido, mostraré la forma de subir múltiples archivos con .NET.

Categories
.NET ASP.NET

Eliminando acentos con .NET 1.x

En la entrada anterior vimos que con .NET 2 la eliminación acentos (y otros diacríticos) es una tarea trivial, pues bien
para hacer esta misma tarea con Mono -que al parecer no tiene implementado esta parte todavía- o versiones anteriores del .NET Framework 2, se puede usar el API de la función FoldString
o tomar parte del código de VietPad, escrito por Quan Nguyen.

csharp:

public class Program
{
    #region Foldstring
    [Flags]
    private enum MapFlags
    {
        MAP_FOLDCZONE = 0x00000010,// fold compatibility zone chars
        MAP_PRECOMPOSED = 0x00000020,// convert to precomposed chars
        MAP_COMPOSITE = 0x00000040, // convert to composite chars
        MAP_FOLDDIGITS = 0x00000080 // all digits to ASCII 0-9
    }
    [DllImport("kernel32.dll")]
    static extern int FoldString(int dwMapFlags, string lpSrcStr, int cchSrc,
       [Out] StringBuilder lpDestStr, int cchDest);

    public static string RemoveDiacritics1(string stIn)
    {
        StringBuilder sb = new StringBuilder();
        FoldString((int)MapFlags.MAP_COMPOSITE, stIn, stIn.Length, sb, stIn.Length * 2);
        return Regex.Replace(sb.ToString(), @"\p{Sk}", "");
    }
    #endregion

    #region Utilizando parte del código de VietPad
    public static string RemoveDiacritics2(string strIn)
    {
        Normalizer n = new Normalizer(Normalizer.D);
        return Regex.Replace(n.normalize(strIn), "\p{Mn}+", "");
    }
    #endregion

    public static void Main(string[] args)
    {
        string str = "Canción";
        // Usando API de FoldString
        Console.WriteLine(RemoveDiacritics1(str));
        // Usando parte del código de VietPad (http://vietpad.sourceforge.net)
        Console.WriteLine(RemoveDiacritics2(str));
        Console.Read();
    }
}

Nota1: Por alguna extraña razón, al compilar desde Visual Studio 2003 no funciona bien el ejemplo cuando
se usa FoldString, pero si se compila desde la línea de comandos no hay ningún problema

Nota2: No he probado el funcionamiento del código en Mono para Windows.

Archivos Relacionados

Categories
.NET ASP.NET

Eliminando acentos con .NET 2

Intentando simular —en un pequeño gestor de noticias que estoy desarrollando— la forma como WordPress elimina los acentos de los títulos de las entradas (ver función remove_accents en wp-includes/functions-formatting.php), para que las URL se vean sin problemas y mejoren el posicionamiento del sitio, encontré una referencia muy útil para hacer esa tarea de una manera sencilla usando .NET Framework 2:

csharp:

static string UrlSanitize(string url)
{
        url = Regex.Replace(url, @"\s+", "-");
        string stFormD = url.Normalize(NormalizationForm.FormD);
        StringBuilder sb = new StringBuilder();
 
        for (int ich = 0; ich < stFormD.Length; ich++)
        {
                UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
                if (uc != UnicodeCategory.NonSpacingMark)
                {
                        sb.Append(stFormD[ich]);
                }
        }
 
        return (sb.ToString());
}