Grafica in runtime

marquito5

Nuovo Utente
17 Gen 2007
6
0
0
Sono un appassionato di web e ho deciso di apprendere asp.net dopo aver fatto qualche cosa con asp (non sono completamente novizio di programmazione ma non sono un professionista) .

La prima domanda che mi sono posto è, come posso riempire, diciamo a runtime, una pagina aspx dove è presente una masterpage e un contentplaceholder, o come cavolo si chiama l'area riprogrammabile della masterpage?

Un grazie a chiunque voglia aiutarmi!:book:
 
mmmhhh...

La domanda posta così potrebbe voler dire molte cose...

Provo a rispondere nel modo più semplice poi vedi tu come estendere il discorso...

Crei una nuova pagina .aspx specificando che vuoi farla derivare da una MasterPage, e selezioni quella che hai creato...

Se una pagina ce l'hai già invece, per associarla alla Master devi inserire questo:
Codice:
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
...la tua pagina...
</asp:Content>

Naturalmente con i riferimenti giusti di:
  • Language
  • MasterPageFile
  • CodeFile
  • Inherits
  • ContentPlaceHolderID

Poi nel Code behind fai quello che desideri...

:byebye:
 
Ok! Parliamone ...

Intanto grazie ArtCava di aver preso in considerazione il mio argomento.

Ok la pagina che ho generato ha il codice in testa come mi hai descritto (tranne 'language' che io da profano uso VB).

Ora,se voglio aggiungere una serie di immagini all'interno del ContentPlaceHolder prelevandole da una cartella, nel Code behind farò un ciclo e...

adesso mi perdo ...

in asp scrivevo response.write con tutta la stringa <img src="..." > eccetera e visualizzavo l'immagine, in asp.net spero che ci sia qualcosa di più rapido.

Puoi/potete aiutarmi?
 
You're lucky!

Mi hai stimolato la creatività!

Diciamo che nativamente (per ASP.NET) non conosco un metodo veloce diverso da quello che comunemente si utilizzava in ASP con il FileSystemObject...

In ASP.NET esistono dei controlli tipo GridView, DataList che ti permettono di caricare dinamicamente informazioni a partire da DB, files XML, oppure oggetti. In nessun modo è possibile caricare informazioni dal FileSystem.

Normalmente per caricare delle immagini in questi controlli ne viene specificato il path in una colonna del DB, oppure in un tag XML, o proprietà di esso.

In effetti però perché non caricare le informazioni dei files (... immagini nello specifico...) in un array di oggetti?

L'oggetto più indicato sarebbe FileInfo che trovi in System.IO. Ma sicuramente non da informazioni sulla posizione relativa del file nell'applicazione web...

Come tu sai una cosa è dire C:\Inetpub\wwwroot\Images\image.jpg e altra cosa è Images/image.jpg.

Quindi ho creato "ad hoc" una dll che fa tutto questo.

Ha un oggetto principale Folder il cui metodo GetFileList ritorna un array di FileListed.

Se prendi questo array e lo associ al DataSource di un DataList il gioco è pressochè fatto...

Pagina aspx
Codice:
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
        <ItemTemplate>
            <asp:Image ID="Image1" runat="server" />
        </ItemTemplate>
    </asp:DataList>
</asp:Content>

Code behind
Codice:
using ArtCava.FileSystemListing;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Istanza dell'oggetto con specificato il Path di ricerca...
        Folders fld = new Folders(@"C:\Inetpub\wwwroot\Images");
        //Qui specifico il Path relativo per il WEB
        fld.URLPath = "Images";
        //Carico tutti i files
        FileListed[] list = fld.GetFileList();
        //Associo l'array al DataList
        DataList1.DataSource = list;
        //Genero il binding automatico dell'oggetto
        DataList1.DataBind();
    }
    //Evento che si scatena ad ogni item dell'array che entra nel DataList
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        //Prelevo l'oggetto "boundato"...
        FileListed f=(FileListed)e.Item.DataItem;
        //Cerco l'oggetto image nel DataList
        Image pippo = (Image)e.Item.FindControl("Image1");
        //Gli assegno il Path, quello relativo...
        pippo.ImageUrl=f.WebPath;
    }
}

L'unico problema sta nel fatto che io utilizzo C#, ma vedrai la conversione di queste poche righe di codice saranno una passeggiata...

Le altre proprietà esposte attualmente dall'oggetto FileListed sono:
  • Size
  • FileExtension
  • SystemPath
  • Exists
  • Name

Se hai bisogno di altre proprietà...

Per scaricare la DLL fai Click qui

:byebye:
 
Bell'affare

Veramente complimenti!

Devo digerire ancora tutto ciò che mi hai postato, ma appena controllato, ti porrò altre domande, sempre che non ti disturbi.

A presto!:fonzie:
 
Adesso stimoli my brain

In ASP.NET esistono dei controlli tipo GridView, DataList che ti permettono di caricare dinamicamente informazioni a partire da DB

Quindi, studiato un DB ad hoc per delle news, con un immagine, un titolo e del testo, posso utilizzare un datalist per preparare una pagina di notizie?
 
Semplice

Prepari il tuo DataList sulla pagina con gli oggeti predisposti a ricevere l'immagne, il titolo e la news...

Nel Page_Load carichi un DataReader (quello di ADO per capirci...) con la tua brava "SELECT * FROM..."

Lo associ al DataSource del DataList, e poi chiami il metodo DataBind() come avresti fatto con il mio oggetto...

Il DataBind() scatenerà tanti ItemDataBound quanti sono i record del DataReader. A questo punto invece di
Codice:
FileListed f=(FileListed)e.Item.DataItem;
carichi un
Codice:
DataReader RS = (DataReader)e.Item.DataItem;

Dall'RS poi prelevi i dati che ti servono e li metti nei controlli del DataList...

Beh! Prova poi fammi sapere...

:byebye:
 
Ce l'ho fatta!

Buon ArtCava,

il parto è stato lungo ma ce l'ho fatta. :mavieni:

Ho fatto il tutto senza inserire una linea di codice, poichè la mia ignoranza a riguardo è ancora insormontabile.

Questo quello che ho combinato.

Codice:
    <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/news.mdb"
        SelectCommand="SELECT * FROM [news] order by id desc;">
    </asp:AccessDataSource>
    <asp:DataList ID="DataList1" runat="server" DataSourceID="AccessDataSource1" Width="100%" >
        <ItemTemplate>
            <div class="imgcol">
                <asp:Image ID="Image1" runat="server" ImageAlign="TextTop" ImageUrl='<%# Eval("immagine") %>'/>
            </div>
            <div class="textcol">
                <h1><asp:Literal ID="Label1" runat="server"  Text='<%# Eval("titolo") %>'></asp:Literal></h1>
                <p><asp:Literal ID="Literal1" runat="server" Text='<%# Eval("testo") %>'></asp:Literal></p>
            </div>
        </ItemTemplate>
    </asp:DataList>

Non so bene se è come quello che mi avevi descritto, ma per ora potrebbe andar bene per la visualizzazione.

Il bello viene ora!

L'inserimento!

Per adesso inserisco tutto con un detailview (la parte di codice VWD la fa tutto in automatico se ben impostato), ma l'oggetto non si può personalizzare molto.

Ovvero, se volessi far selezionare un file immagine dal PC e uplodarlo sul server quando inserisco anche i campi titolo e testo, ancora non so farlo.

Mi puoi/potete dare una zampa anche in questa occasione?
 

Discussioni simili