no. 1 no. 1 no. 1 no. 1 no. 1 no. 1 no. 1 no. 1
03/2010
06

Ad Rotation de Texto usando jQuery

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

En este post veremos cómo rotar los anuncios de vínculos o enlaces web. Voy a utilizar el Cycle Plug-in para este propósito, ya que realiza esta tarea en una sola línea de código.

<html xmlns="http://www.w3.org/1999/xhtml">
<
head>
    <
title>Ad Rotation de Texto usando jQuery</title>
    <
script type="text/javascript" src="http://code.jquery.com/jquery-latest.js" />
    <
script type="text/javascript" ="Scripts/jquery.cycle.all.min.js" />
 
    <
script type="text/javascript">
       
$(document).ready(function() {
                 $('#Links').cycle('fade');
        });
    </script>
 
    <
style type="text/css">
   
body
   
{
        font-size:13px;
        font-family:"Lucida Grande";
        color:#444444;
    }
    </style>
 
</
head>
<
body>
<
div id="Links">
    <
a href="http://www.edoswit.qsh.es">.NET Articles</a>
    <
a href="http://www.sqlservercurry.com">SQL Server Tips</a>
    <
a href="http://saffronstroke.com">Expression Web Tips</a>
</
div>
</
body>
</
html>

 Nota: Para girar hipervínculos en ASP.NET, tan solo es cambiar los enlaces HTML con el texto siguiente:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="http://jquery.com">jQuery</asp:HyperLink>

No hay necesidad de cambiar cualquier otro código ya que este control asp.net se representa como <a href=””…

Puede ver una demostración original del ejemplo dado. Gira el vínculo después de cada pocos segundos.


03/2010
06

Enlazar una Enumeracion a un DropDownList

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

Para enlazar una enumeración a un DropDownList se puede hacer en 2 líneas como también lo veremos pero se puede dar el caso que quisiéramos enlazar a la propiedad ValueMember el numero del tipo de la enumeración y en el DisplayMember el nombre del tipo, para este caso emplearemos unas cuantas líneas mas para que sea posible.

<asp:DropDownList ID="DropDownList1" runat="server">
</
asp:DropDownList>

enum Speed
{
    Low = 1,
    Medium = 2,
    High = 3
}

 

 Friend Enum Speed
      Low = 1
      Medium = 2
      High = 3
 
End Enum

 

 

Primer Método: Mostrando los nombre de los tipos de la enumeración.

Código en C#

protected void Page_Load(object sender, EventArgs e)
{
    DropDownList1.DataSource =
Enum.GetValues(typeof(Speed
));
    DropDownList1.DataBind();
}

Código en VB

Protected Sub
Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    DropDownList1.DataSource = System.Enum.GetValues(
GetType
(Speed))
    DropDownList1.DataBind()
End Sub

Segundo Método: Enlazando el ValueMember y DisplayMember

Código en C#

protected void Page_Load(object sender, EventArgs e)
{
   
Hashtable htSpeed = BindEnum(typeof(Speed));     
    DropDownList1.DataSource = htSpeed;
    DropDownList1.DataValueField =
"key";
    DropDownList1.DataTextField =
"value";
    DropDownList1.DataBind();
}

protected Hashtable BindEnum(Type speedEnum)
{
   
string[] enumNm = Enum.GetNames(speedEnum);
   
int[] enumVal = (int[])Enum.GetValues(speedEnum);

   
Hashtable htSpeed = new Hashtable();
   
for (int cnt = 0; cnt < enumVal.Length; cnt++)
    {
        htSpeed.Add(enumVal.GetValue(cnt), enumNm[cnt]);
    }
   
return htSpeed;
}

Código en VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
   Dim htSpeed As Hashtable = BindEnum(GetType(Speed))
   DropDownList1.DataSource = htSpeed
   DropDownList1.DataValueField = "key"
   DropDownList1.DataTextField = "value"
   DropDownList1.DataBind()
End Sub

Protected Function BindEnum(ByVal speedEnum As Type) As Hashtable
   Dim enumNm() As String = System.Enum.GetNames(speedEnum)
   Dim enumVal() As Integer = (System.Enum.GetValues(speedEnum), Integer())

   Dim htSpeed As New Hashtable()
   For cnt As Integer = 0 To enumVal.Length - 1
       htSpeed.Add(enumVal.GetValue(cnt), enumNm(cnt))
   Next cnt
   Return htSpeed
End Function


 


03/2010
06

Expresion regular para validar un Decimal

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

Este post algo pequeño pero útil donde nos indica como utilizar expresiones regulares para validar ingreso de números, como es este caso, en que la parte entera no puede exceder de más de 5 dígitos y la parte decimal no puede exceder de más de 2 dígitos.

Aquí está la forma de resolver esto mediante una expresión regular:

<asp:TextBox ID="txtDecimal" runat="server"></asp:TextBox>

<asp:RegularExpressionValidator ID="revDecimal" runat="server"

ControlToValidate="txtDecimal"

ValidationExpression="^[0-9]{1,5}(\.[0-9]{0,2})?$"

ErrorMessage="Formato incorrecto!" />

Descargar demostración desde Aqui, luego estare publicando mas sobre este tema de validaciones, Saludos...

03/2010
03

Determinar si un servicio Windows esta ejecutando

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

La clase ServiceController hace que sea fácil de recuperar información sobre un servicio de Windows y manipularlo. Aquí hay algo de código. Antes de ejecutar este ejemplo, asegúrese de que ha añadido una referencia a System.ServiceProcess.

Código en C#

static void Main(string[] args)
{
    try
    {
       ServiceController controller = new ServiceController("NombreServicio");

        if (controller.Status.Equals(ServiceControllerStatus.Running)
            && controller.CanStop)
        {
            controller.Stop();
            Console.WriteLine("Servicio Detenido.");
        }         
        Console.ReadLine();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Código VB.NET

Shared Sub Main(ByVal args() As String)
    Try
        Dim controller As New ServiceController("NombreServicio")

        If controller.Status.Equals(ServiceControllerStatus.Running)_
          AndAlso controller.CanStop Then
            controller.Stop()
            Console.WriteLine("Servicio Detenido.")
        End If
        Console.ReadLine()
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try
End Sub

Asegúrese de tener permisos para detener el servicio o bien obtendrá una excepción. Saludos...


03/2010
03

Actualizar tabla con numeros aletorios en SQL

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

En esta pequeña demostración realizaremos la actulización de la columna de una tabla con Datos generados aleatoriamente entre un rango definido, veamos la tabla para la demostración:

CREATE TABLE Persona {

IdPersona int NOT NULL,

Nombre nvarchar (50) NOT NULL,

Visitas int NULL,

)

INSERT INTO Persona VALUES ( 101, N'Oscar', 0 );

INSERT INTO Persona VALUES ( 102, N'Susana', 0 );

INSERT INTO Persona VALUES ( 103, N'Mijail', 0 );

INSERT INTO Persona VALUES ( 104, N'Sandra', 0 );

INSERT INTO Persona VALUES ( 105, N'Miguel', 0 );

INSERT INTO Persona VALUES ( 106, N'Carlos', 0 );

INSERT INTO Persona VALUES ( 107, N'Gabriela', 0 );

INSERT INTO Persona VALUES ( 108, N'Henry', 0 );

INSERT INTO Persona VALUES ( 109, N'Luis', 0 );

INSERT INTO Persona VALUES ( 110, N'Alan', 0 );

Ahora vamos actulizar la tabla para la columna "Visitas" entre un rango de 24 a 123 y obtenemos el resultado que muestro a continuación:

UPDATE Persona SET Visitas = ABS(CHECKSUM(NEWID())) % 100 + 24

SELECT * FROM Persona


02/2010
27

GridView con Estilo a VS2008

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

GridView con Estilo a VS2008

Sorting

Para aplicar el icono personalizado de selección a la cabecera del DataGrid, he usado el evento RowDataBound para aplicar un estilo CSS a la celda de la cabecera.

protected void RowDataBound(object sender, GridViewRowEventArgs args) {

    GridView gridView = (GridView)sender;

    if (gridView.SortExpression.Length > 0) {

       int cellIndex = -1;

       foreach (DataControlField field in gridView.Columns) {

            if (field.SortExpression == gridView.SortExpression) {

                  cellIndex = gridView.Columns.IndexOf(field);

                  break;

            }

       }

       if (cellIndex > -1) {

          if (args.Row.RowType == DataControlRowType.Header) {

              args.Row.Cells[cellIndex].CssClass +=

                           (gridView.SortDirection == SortDirection.Ascending ? " sortasc" : " sortdesc");

          }

       }

   }

}

Border

Se usa un DIV para definir el marco de la tabla. Entonces utilizamoa CSS para aplicar imágenes de fondo a estos DIVs. 

<div class="grid">

   <div class="rounded">

      <div class="top-outer"><div class="top-inner"><div class="top">

      <h2>Northwind Products</h2>

      </div></div></div>

      <div class="mid-outer"><div class="mid-inner"><div class="mid">

            <%--Codigo HTML de la Grilla--%>

       </div></div></div>

       <div class="bottom-outer"><div class="bottom-inner">

       <div class="bottom"></div></div></div>

     </div>

</div>

Pager Style y Settings

El control GridView permite personalizar la forma de los controles de paginación utilizando el elemento PagerSettings (si desea personalizar aún más puede utilizar el PagerTemplate). Proporciona otros atributos que se pueden utilizar para cambiar la apariencia de la fila de la página. Aquí hay una tabla que describe los modos de apoyo de la PagerSettings.

Modo

Descripción

NextPrevious

Botones de página anterior y página siguiente.

NextPreviousFirstLast

Botones de página anterior, página siguiente, primera pagina y ultima página.

Numeric

Botones de enlace para acceder a la página numerada directamente.

NumericFirstLast

Numerada y el primer enlace y botones de enlace de último.

Desafortunadamente, no hay un modo de NextPreviousFirstLastNumeric, ya que en realidad es la que yo usaría. Sin embargo, el modo de NumericFirstLast está muy cerca de lo que se necesita para configurar la grilla.

<PagerSettings Mode="NumericFirstLast" PageButtonCount="7" FirstPageText="" LastPageText="" />

Todo el Codigo del GridView

<asp:GridView ID="gvProducts" runat="server" DataSourceID="odsProducts"

OnRowDataBound="RowDataBound" AutoGenerateColumns="false"

AllowPaging="true" AllowSorting="true" CssClass="datatable" CellPadding="0" CellSpacing="0"

BorderWidth="0" GridLines="None">

    <PagerStyle CssClass="pager-row" />

    <RowStyle CssClass="row" />

    <PagerSettings Mode="NumericFirstLast" PageButtonCount="7" FirstPageText="" LastPageText="" />

     <Columns>

        <asp:BoundField  HeaderText="ID" DataField="ProductID" SortExpression="ProductID"

            HeaderStyle-CssClass="first" ItemStyle-CssClass="first" />

        <asp:BoundField HeaderText="Name" DataField="ProductName" SortExpression="ProductName" />

        <asp:BoundField HeaderText="Quantity" DataField="QuantityPerUnit" SortExpression="QuantityPerUnit" />

        <asp:BoundField HeaderText="Unit Price" DataField="UnitPrice" SortExpression="UnitPrice" DataFormatString="{0:c}" ItemStyle-CssClass="money" />

        <asp:BoundField HeaderText="In Stock" DataField="UnitsInStock" SortExpression="UnitsInStock" />

        <asp:BoundField HeaderText="On Order" DataField="UnitsOnOrder" SortExpression="UnitsOnOrder" />

    </Columns>

</asp:GridView>

Descarga la Demo desde Aqui , Disfrútalo.


02/2010
24

YouTube player control

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

Este es un control de servidor que sirve para mostrar videos de YouTube en varios lugares de la aplicación.

El codigo nos presentara unas propiedades que el usuario debera establecer para el reproductor de YouTube desde la página ASPX:

  • URL (establece dirección URL del video)
  • Height (establece la altura del reproductor)
  • Width (establece el ancho del reproductor)
  • AllowFullScreen (permitir la opción de pantalla completa)

    using System;

    using System.Text;

    using System.Web.UI.HtmlControls;

 

    public class YouTubePlayer : System.Web.UI.Control

    {

        private string width = "425";

        private string height = "344";

        private bool allowFullScreen = true;

 

        public YouTubePlayer()

        {

        }

 

        public String URL { get; set; }

 

        public String Width

        {

            get { return this.width; }

            set { this.width = value; }

        }

 

        public String Height

        {

            get { return this.height; }

            set { this.height = value; }

        }

 

        public Boolean AllowFullScreen

        {

            get { return this.allowFullScreen; }

            set { this.allowFullScreen = value; }

        }

 

        public override void RenderControl(System.Web.UI.HtmlTextWriter writer)

        {

            StringBuilder oBuilder = null;

            if (!string.IsNullOrEmpty(URL))

            {

                oBuilder = new StringBuilder();

                oBuilder.Append("<object width=\"" + Width + "\" height=\"" + Height + "\"><param name=\"movie\" value=\"" + URL + "\">");

                oBuilder.Append("</param><param name=\"allowFullScreen\" value=\"" + AllowFullScreen.ToString() + "\"></param><param name=\"allowscriptaccess\" value=\"always\"></param>");

                oBuilder.Append("<embed src=\"" + URL + "\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\"");

                oBuilder.Append("allowfullscreen=\"" + AllowFullScreen.ToString() + "\" width=\"" + Width + "\" height=\"" + Height + "\"></embed></object>");

            }

            var oDiv = new HtmlGenericControl("div");

            oDiv.Attributes.Add("style", "display:inline");

            oDiv.Attributes.Add("id", "divYouTube");

            oDiv.InnerHtml = oBuilder != null ? oBuilder.ToString() : "Youtube url is empty";

            oBuilder = null;

            Controls.Add(oDiv);

            base.RenderControl(writer);

        }

    }

Para utilizarla en una pagina seria registrar primero el control:

<%@ Register Assembly="Demo" Namespace="Demo" TagPrefix="edoswit" %>

Ingresando los valores anteriormente deacuerdo a nuestro proyecto podremos colocar la etiqueta del control de esta forma:

<edoswit:YouTubePlayer ID="youTube" runat="server" Width="500" Height="400" AllowFullScreen="false" URL="http://www.youtube.com/v/Pr3SX5xwfh0&hl=en_US&fs=1&">

</edoswit:YouTubePlayer>

El resultado es el siguiente:

Para descargar el archivo desde Aqui, eso fue todo disfrutenlo. Saludos....


02/2010
22

Mostrar imagen en un ComboBox

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

Es muy fácil añadir imágenes en un ComboBox .NET proporciona una manera fácil de agregar la imagen. Veamos un ejemplo.

Lo primero es cargar los Items del comboBox:

private void LoadItems() {

    myComboBox.DrawMode = DrawMode.OwnerDrawVariable;

    myComboBox.Items.Clear();

    string[] priorities = { "High", "Medium", "Low" };

    foreach (string priority in priorities)  {

          myComboBox.Items.Add(priority);

    }

}

 Luego usamos el evento DrawItem para dibujar e insertar las imagenes para cada Item:

private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)  {

     if (e.Index >= 0)  {

          ComboBox cmb = sender as ComboBox;

          string text = cmb.Items[e.Index].ToString();

          e.DrawBackground();

          Image img = GetImage(text);

          if (img != null) {

               e.Graphics.DrawImage(img, e.Bounds.X, e.Bounds.Y, 15, 15);

          }

          e.Graphics.DrawString(text, cmb.Font, Brushes.Black, new RectangleF(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));

          e.DrawFocusRectangle();

     }

}

Por ultimo el metodo GetImage(text) que nos devuelve una imagen usada en el proyecto como recurso:

private Image GetImage(string text)  {

      switch (text)  {

            case "High":

                 return Properties.Resources.High;

            case "Low":

                 return Properties.Resources.Low;

            case "Medium":

                 return Properties.Resources.Medium;

      }

      return null;

}

y el resultado que obtendremos sera algo como la siguiente imagen, espero que les sea de ayuda, Saludos.


 


02/2010
20

ASP.NET MVC subiendo y descargando Archivos

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

En Web Forms, es tan facil como cuando se arrastra un control FileUpload en el diseñador. El formulario HTML resultante que envuelve toda la página está decorado con un atributo adicional: enctype = "multipart / form-data". Este el FileUpload sí se representa en html es como un input con type=file. Dentro de una vista en MVC, hay un buen número de maneras de configurar esta opción. La primera es con HTML:

<form action="/" method="post" enctype="multipart/form-data">
  <
input type="file" name="FileUpload1" /><br />
  <
input type="submit" name="Submit" id="Submit" value="Upload" />
</
form>

Observe que la etiqueta <form> incluye el atributo enctype, y el atributo method en post. Esto es necesario porque la forma por defecto será presentado a través del método HTTP GET. En el enfoque siguiente, utilizando el Html.BeginForm () hace que el método de extensión html es exactamente el mismo cuando se solicita la página:

<% using (Html.BeginForm("", "home", FormMethod.Post, new {enctype="multipart/form-data"}))
   {%>
     <input type="file" name="FileUpload1" /><br />
     <
input type="submit" name="Submit" id="Submit" value="Upload" />
<% }%>

Observe el atributo de nombre del elemento <input type="file">, la página resultante debería ser como este:

Así que ahora podemos navegar en un archivo local y clic en el botón de enviar para subirlo al servidor web. Lo que se necesita luego es la manera de administrar el archivo en el servidor. Cuando se usa un control FileUpload, por lo general, ver el código que comprueba si un archivo ha sido cargado en realidad, utilizando el metodo FileUpload.HasFile(). Sin embargo, un método de extensión rápida puede hacerse cargo de:

public static bool HasFile(this HttpPostedFileBase file)
{
  return (file != null && file.ContentLength > 0) ? true : false;
}

En la clase del controlador, se ve que tiene una solicitud de objeto como una propiedad, que es de tipo HttpRequestBase. Este es un contenedor para una petición HTTP, y expone las propiedades, incluyendo una colección de archivos (en realidad una colección de tipo HttpFileCollectionBase). El método de extensión de los controles es para asegurarse de que hay algo allí, y que tiene algún contenido. Poner esto en uso dentro de la acción del controlador es muy sencillo:

public class HomeController : Controller
{
  public ActionResult Index() { foreach (string upload in Request.Files)
    {
      if (!Request.Files[upload].HasFile()) continue;
      string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
      string filename = Path.GetFileName(Request.Files[upload].FileName);
      Request.Files[upload].SaveAs(Path.Combine(path, filename));
    }
    return View();
  }
}

Subiendo Multiples Archivos:

Al saber del hecho de que Request.Files es una colección, nos sugiere que puede acomodar más de un archivo.. Si cambia la presentacion de la pagina original a esta:

<% using (Html.BeginForm("", "home", FormMethod.Post, new {enctype="multipart/form-data"}))
   {%>
     <input type="file" name="FileUpload1" /><br />
     <input type="file" name="FileUpload2" /><br />
     <input type="file" name="FileUpload3" /><br />
     <input type="file" name="FileUpload4" /><br />
     <input type="file" name="FileUpload5" /><br />
     <input type="submit" name="Submit" id="Submit" value="Upload" />
<% }%>
 

El código en el controlador de la acción ya esta para todos los controles de envío de archivos, de modo que no se necesitan cambios para que funcione con la carga de archivos múltiples. Observe que cada entrada tiene un atributo de nombre diferente. Si usted necesita hacer referencia a ellos individualmente, que es lo que usa. Por ejemplo, para hacer referencia a la tercera, debería llegar hasta él utilizando Request.Files["FileUpload3"].

Guardar en una base de datos

La siguiente porción de código es realmente indicativo. Cuenta con ADO.NET en una acción del controlador. Como todos sabemos, esto no es realmente lo que se debe hacer. El código de acceso a la base de datos pertenece a la capa de datos de acceso en algún lugar dentro del modelo. Sin embargo, el código debería dar a la gente un punto de partida si desea guardar los archivos subidos a una base de datos. En primer lugar, he creado una base de datos (FileTest) y añadió una tabla: FileStore:

CREATE TABLE [dbo].[FileStore](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FileContent] [image] NOT NULL,
[MimeType] [nvarchar](50) NOT NULL,
[FileName] [nvarchar](50) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

El campo FileContent es un tipo de datos de imagen, y es donde los datos binarios que forma el archivo se almacena. La Accion del Index se cambia a lo siguiente:

public ActionResult Index()
{
  foreach (string upload in Request.Files)
  {
    if (!Request.Files[upload].HasFile()) continue;

    string mimeType = Request.Files[upload].ContentType;
    Stream fileStream = Request.Files[upload].InputStream;
    string fileName = Path.GetFileName(Request.Files[upload].FileName);
    int fileLength = Request.Files[upload].ContentLength;
    byte[] fileData = new byte[fileLength];
    fileStream.Read(fileData, 0, fileLength);

    const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";
    using (var conn = new SqlConnection(connect))
    {
      var qry = "INSERT INTO FileStore (FileContent, MimeType, FileName) VALUES (@FileContent, @MimeType, @FileName)";
      var cmd = new SqlCommand(qry, conn);
      cmd.Parameters.AddWithValue("@FileContent", fileData);
      cmd.Parameters.AddWithValue("@MimeType", mimeType);
      cmd.Parameters.AddWithValue("@FileName", fileName);
      conn.Open();
      cmd.ExecuteNonQuery();
    }
  }
  return View();
}

El código comprueba cada uno de los controles para ver si tiene archivo. Desde allí, los extractos de 3 cosas de información: el nombre del archivo, el tipo de MIME (qué tipo de archivo es) y los datos binarios que se fluye como parte de la solicitud HTTP. Los datos binarios se transfiere a una matriz de bytes, que es lo que se almacena en el campo de tipo de datos de imagen en la base de datos. El tipo MIME y el nombre son importantes para cuando el archivo se devuelve a un usuario. Vamos a ver en la parte siguiente.

Descargando los archivos por el usuario

¿Cómo volver a entregar los archivos a los usuarios? esto dependerá de cómo los tengas almacenadas en primer lugar. Si los tiene almacenados en una base de datos, lo normal es leer el archivo y devolverlo al usuario. Si se almacenan en un disco, usted puede simplemente ofrecer un enlace a ellos. Siempre que necesita transmitir un archivo en el navegador, se utilizará una de las sobrecargas del método  File(). Hay 3 tipos de retorno diferente del método File(): FilePathResult, FileContentResult y FileStreamResult. El primero transmiten un archivo directamente desde el disco, el segundo envía una matriz de bytes al cliente, mientras que el tercero envía el contenido de un objeto Stream que se ha generado y abierto.

public FileContentResult GetFile(int id)
{
  SqlDataReader rdr; byte[] fileContent = null;
  string mimeType = "";string fileName = "";
  const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";

  using (var conn = new SqlConnection(connect))
  {
    var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID";
    var cmd = new SqlCommand(qry, conn);
    cmd.Parameters.AddWithValue("@ID", id);
    conn.Open();
    rdr = cmd.ExecuteReader();
    if (rdr.HasRows)
    {
      rdr.Read();
      fileContent = (byte[])rdr["FileContent"];
      mimeType = rdr["MimeType"].ToString();
      fileName = rdr["FileName"].ToString();
    }
  }
  return File(fileContent, mimeType, fileName);
}

La forma más fácil de invocar este método es proporcionar un enlace:

<
a href="/GetFile/1">Click to get file</a>

Si los archivos de la base de datos son las imágenes, en lugar de un hipervínculo, sólo apuntan a la acción de un controlador en el atributo src de un elemento <img>:

<img src="/GetFile/1" alt="My Image" />

Vamos a echar un vistazo a la forma de utilizar simplemente el FilePathResult ahora. Esto se utiliza para transmitir archivos directamente desde el disco:

public FilePathResult GetFileFromDisk()
{
  string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
  string fileName = "test.txt";
  return File(path + fileName, "text/plain", "test.txt");
}

Y esto también es invocado a través de un hipervínculo simple:

<a href="/GetFileFromDisk">Click to get file</a>

La opción final - FileStreamResult puede ser usado para transmitir los archivos desde el disco también:

public FileStreamResult StreamFileFromDisk()
{
  string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
  string fileName = "test.txt";
  return File(new FileStream(path + fileName, FileMode.Open), "text/plain", fileName);
}

Entonces, ¿cuál es la diferencia entre FilePathResult y FileStreamResult y que se debe usar? La principal diferencia es que FilePathResult utiliza HttpResponse.TransmitFile para escribir el archivo a la salida HTTP. Este método no tiene el archivo en el buffer de memoria del servidor, por lo que debería ser una mejor opción para enviar archivos más grandes. Es muy parecido a la diferencia entre usar un DataReader o un DataSet. Por otro lado, puede que tenga que comprobar en el servidor que aloja su sitio web, como un error en TransmitFile que puede conducir a la entrega parcial de los archivos, o incluso el fracaso completo. FileStreamResult es un gran manera para transferir, por ejemplo, devolviendo imágenes en la memoria de gráfico generado por los controles de ASP.NET gráfico sin tener que guardarlos en el disco.


02/2010
18

Transformemos el Perú

Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)

Cuando lo vi me hizo pensar y creo que todos los peruanos deben ver este video para ponernos las pilas y hacer las cosas bien.


1 2 3 4 Next > 

arriba