Ahoj
Dělám si fotogalerii v ASP.NET - C# a vyskitl se problém. Chci, abych nahrál obrázky do složky Photos/ a aplikace sama vytvoří seznam těchto souborů a každý soubor se vytvoří jako ImageButton a když se na něj klikne tak se prvede kód:
this.PictureView.ImageUrl = "název fotky + formát";
Ale opravdu netuším jak to udělat. Hledal jsem na Seznam.cz a na Google.com, ale nic moc.... Neumím totiž anglicky ( což vím, že je chyba ) a žádám vás o radu jak to udělat.
Díky moc ....
Fórum › .NET
ASP.NET - C#: Tvorba Dynamyckého ImageButtonu
Pre každy subor jpg v root/galeria vytvor image button, priraď skript a umiestni ho na stránku.
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/galeria")))
{
if (fileName.Remove(0, fileName.Length - 3) == "jpg")
{
ImageButton ib = new ImageButton();
ib.OnClientClick="nejaky klientsky skript";
Form1.Controls.Add(ib);
}
}
do toho skriptu musiš napisať napr. toto:
window.open ("http://www.javascript-coder.com","mywindow");
Form1.Controls.Add(ib);
Počítám, že Form1 je id <form> a Add(ib) přidá do něj onen ImageButton.
Ale teť asi hloupá otázka... Přidá to tam jeden obrázek nebo všechny, které budou umístěny v galerie/ ..., a pokud všechny, nebudou se ty id těch ImageButtonů mezi sebou hádat???
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/galeria"))) //cykl foreach, do proměnné fileName uložím každou položku pole, pole == soubory v té složce a ty načteě pomocí Directory.GetFiles
{
if (fileName.Remove(0, fileName.Length - 3) == "jpg") //názvu vytáhnu příponu, pokud je soubor jpg pokračuji
{
ImageButton ib = new ImageButton(); //vytvoření instace třídy ImageButton
ib.OnClientClick="nejaky klientsky skript"; //ořiřazení eventu tlačítku
Form1.Controls.Add(ib); //tlačítko přidám do stránky
}
}
Trochu sem jej upravil:
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/Photos")))
{
if (fileName.Remove(0, fileName.Length - 3) == "png")
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.OnClientClick="skript";
Form1.Controls.Add(PhotoButton);
}
}
A chtěl jsem se zeptat, co znemená fileName.Length - 3)
To SDV : to som ti tam dal ako bonus :-) v tej podmienke sa kantroluje či sa string fileName konči na "png". Keďže robiš fotogaleriu tak tam môžeš dať hocičo, napr. ak veľkosť súboru presahuje 2MB zobraziť alternatívu atp ...
ten skript je javaskript, ImageButton je stavany tak, že "funguje" na klientskej strane. Nechapem čo kod ktory si napisal ma robiť, skus to opísať.
Díky za vysvětlení...
Ten kód má dělat:
Mám <asp:Image> a v něm se zobrazuje náhled té fotky v plné velikosti 640x480. A pod ním mám ony imagebuttony. A ten nese zmenšeninu fotografie. Pokud se na něj klikne, tak se provede onen kód. Tj.: u mého <asp:Image> se změní ImageUrl="odkaz na obrázek"
A právě to potřebuju. Aby se zindexoval obsah složky, a poté se vytvořily ImageButtony právě s funkcí:
this.PictureView.ImageUrl = "název fotky + formát";
( Zatím to je dělané provizorně tak, že: mám ručně přidaný ImageButton a v něm miniaturu a procedutu OnClick. A ta procedura, provede výše zminovaný kód. A já potřebuju, abych už nic nemusel přidávat. Akorát nahrál soubory do složky a dál už se o to postaral asp.net a C# )
Musis si vytvorit komponentu <asp:Panel></asp:Panel>, je to to same jako div.A pak pouzijes Panel.Controls.Add();
Tak to jsem taky vyřešil....
Ale jedno stále opět přetrvává:
Po kliknutí na onen ImageButton potřebuju, aby se změnila ImageUrl u prvku Image (id="PhotoView") na obrázek, který je v ImageButtonu ...
to znamená, že dříve, když sem si fotky přidával do fotogalerie ručně, měl jsem událost onClick u každého buttonu, a tam byl kód: this.PhotoView.ImageUrl="název fotky.png";
Pls... zápasím s tím už od včerejška a stále žádný výsledek
Lépe řešeno, potřebuji každému ImageButtonu přiřadit jinou funkci
Tak prirazuj event OnClick na jednu a tu samou funkci pri jejich generovani.Pak si v te funkci,co ovlada OnClick kontroluj,jaky objekt to poslal a nastav prislusnou hodnotu u toho PhotoView.
nerozumím????? Kam mám přiřadit OnClick??? Pokud dám:
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/Photos")))
{
if (fileName.Remove(0, fileName.Length - 3) == "png")
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.OnClientClick="skript";
PhotoButton.OnClick="";
Form1.Controls.Add(PhotoButton);
}
}
tak mi to onClick podtrhne jako error
Tak už jsem to zrobil :--))))) Díky
P.S.: A jak mám poznat, na co se kliklo???
protected void Page_Load(object sender, EventArgs e)
{
this.Page.Title = Page.Title + " - Fotogalerie";
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/Photos")))
{
if (fileName.Remove(0, fileName.Length - 3) == "png")
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.AlternateText = "";
PhotoButton.CssClass = "PhotoBtn";
PhotoButton.Click += PhotoButton_Click;
Panel002_003.Controls.Add(PhotoButton);
}
}
}
private void PhotoButton_Click(object sender, System.EventArgs e)
{
// kód, který zjistí na co se kliklo, a podle toho změní ImageUrl ... ( nevím co, nevím jak ... help
}
1, nejak se mi nezda to prirazeni eventu.Mam dojem,ze tomu neco chybi,ale nejsem si jisty.Pokud ti to reaguje,tak je to stejne jedno.
Jinak takhle nejak by melo vypadat rozpoznavani.
private void PhotoButton_Click(object sender, System.EventArgs e)
{
PhotoView.ImageUrl = ((ImageButton)sender).URL_PROPERTY;
}
Takhle nejak by to melo bejt,snad sem to uzavorkoval spravne.To URL_PROPERTY je property,ve ktere mas ulozene url pro obrazek na danem ImageButtonu.
To URL_PROPETRY mám něčím nahradit??? Takhle to neběží...
Píše to tohle: Typ System.Web.UI.WebControls.ImageButton nelze implicitně převést na typ string.
Vzdyt sem to tam napsal.Nevim property toho imagebuttonu,ktera ma v sobe ulozenou tu adresu toho obrazku.
EDIT: Mela by to byt property ImageUrl.Takze:
PhotoView.ImageUrl = ((ImageButton)sender).ImageUrl;
Já jsem totiž začátečník, a jediné co z toho vím, je že property znamená vlastnosti :-))
Takže jaké zhruba vlastnosti url ???
Já potřebuju, aby mi to tu url zjistilo samo. Ta funkce platí pro včechny ImageButtony.
Viz muj predchozi prispevek.
Ono to funguje......
Vše je teť ok.
Dííííííííky MOC všem za rady :-)))) [ jste super ]
Mějte se
Neříkej hop, dokud nepřeskočíš...
Ještě jeden:-)
Kddyž to nahraju na server ( aspone.cz ) tak se mi tam ImageButtony vykreslí, ale miniatura ne. je tam:
<input type="image" src="D:\Websites\73096f2383\www\Photos\Photo003.png" ...
ale mělo by tam být pouze:
<input type="image" src="Photos/Photo003.png" ...
takže se obrázky nezobearí ani v tlačitku ani v tom asp:Image ( PhotoView )
Takže bych potřeboval z té url odebrat: D:\Websites\73096f2383\www\ a nehcat pouze Photos/Photo003.png ...
Ale opět... nevím jak. Tak vás žádám teda ještě jednou o radu :-))
Zkus pro ziskani listu pouzit DirectoryInfo.Vraci to tridu FileInfo a tam uz muzes ziskat samotny nazev souboru.
Tady je ukazka:
http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=356
Snad to pomuze.
Mě nejde o získání seznamu položek, ale o zkrácení té url ... viz. předchozí příspěvek
Kompletní kód:
foreach (string fileName in Directory.GetFiles(Server.MapPath("~/Photos")))
{
if (fileName.Remove(0, fileName.Length - 3) == "png")
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.AlternateText = "";
PhotoButton.CssClass = "PhotoBtn";
PhotoButton.ImageUrl = fileName;
PhotoButton.Click += PhotoButton_Click;
Panel002_003.Controls.Add(PhotoButton);
}
}
}
private void PhotoButton_Click(object sender, System.EventArgs e)
{
this.PhotoView.ImageUrl = ((ImageButton)sender).ImageUrl;
}
ale rendruje to: <input type="image" src="D:\Websites\73096f2383\www\Photos\Photo003.png" ...
a potřebuju to co je podtržené odstranit :-)
Help me...
Pisu to z hlavy a rucne,takze nezarucuju 100% funkcnost:
foreach (FileInfo fileName in new DirectoryInfo(Server.MapPath("~/Photos")).GetFiles())
{
if (fileName.Extension == "png")
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.AlternateText = "";
PhotoButton.CssClass = "PhotoBtn";
PhotoButton.ImageUrl = Server.MapPath("~/Photos") + "/" + fileName.Name + "." + fileName.Extension;
PhotoButton.Click += PhotoButton_Click;
Panel002_003.Controls.Add(PhotoButton);
}
}
Psal sem to z hlavy,ale mohlo by to fungovat.Princip je v tom,ze proste pouzijes tridu FileInfo,ktera v sobe ma property Name a Extension. Ty pak pouzijes s namapovanou cestou ke slozce s fotkama.
Pak je mozne,ze by slo jeste upravit web.config,aby vracenou cestu predelaval na serverovou,ale s tim si nejsem jisty.Kod vyse by to mel obejit.
Furt nic, rendruje to:
<input type="image" name="ctl02" class="PhotoBtn" src="C:\Documents%20and%20Settings\Windows%20XP\Dokumenty\Obr%c3%a1zky\Photo/Photo001.png" style="border-width:0px;" />
ale obrázky se nezobrazí
A když místo ~/Photos zadám celou adresu ke složce na serveru, tak mi to píše:
System.Web.HttpException: http://neco.aspone.cz/Photos není platná virtuální cesta.
Tak jsem to rozběhal, ale pouze na locathostu:
protected void Page_Load(object sender, EventArgs e)
{
foreach (FileInfo fileName in new DirectoryInfo("Photo/").GetFiles())
{
{
ImageButton PhotoButton = new ImageButton();
PhotoButton.AlternateText = "";
PhotoButton.CssClass = "PhotoBtn";
PhotoButton.ImageUrl = ("Photo/") + "" + fileName.Name;
PhotoButton.Click += PhotoButton_Click;
Panel.Controls.Add(PhotoButton);
}
}
}
private void PhotoButton_Click(object sender, System.EventArgs e)
{
this.PhotoView.ImageUrl = ((ImageButton)sender).ImageUrl;
}
Když dám View in Browser, tak je vše OK, funkční.
Když to ale nahraju na server, tak:
Could not find a part of the path 'c:\windows\system32\inetsrv\Photo'
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'c:\windows\system32\inetsrv\Photo'.
Na tom localhostu mi to renderuje:
<input type="image" name="ctl02" class="PhotoBtn" src="Photo/Photo001.png" style="border-width:0px;" />
Help me
Tu uz jsou jen 3 moznosti:
1, Kdyby se upravil web.config,tak by to melo fungovat,ale nejsem si jisty a ani nevim jak.
2, Udelas si funkci,ktera bude nadbytecnou cestu orezavat a upravovat.
3, Najdi si tridu a property,ktera ti vraci adresu serveru a tu doplnis jiz primo do imageurl v imagebutton (melo by to bejt Request.ServerVariables[]),nazev property si musis najit v dokumentaci).
No, tak nejlepší by to bylo asi způsoby 2a3. Ale nevím jak udělat fci která by upravovala cestu ani jak najít třídu na zjištění cesty k serveru
---
Pokud někdo víte, poradte psl
No mel by ses snazit nad tim trochu premyslet.Takhle bych mohl zkusit napsat primo reseni,ale musis se taky sam aktivne pridat.S tou funkci to treba chapu,ta muze bejt trochu tezsi na napsani,i kdyz ne moc.Staci si uvedomit kroky,co to ma delat.
A jakto,ze nevis,kaj najit tu tridu?Dal sem ti nazev tridy a dokonce i funkci,pod kterou hledat (Request.ServerVariables).Tak pak bud strejda google nebo primo MSDN od microsoftu.
Musis trochu uvazovat jako programator.Co takhle do googlu zadat "Request ServerVariables" a hned v prvnim odkazu zjistis seznam properties, a tam najdes property "SERVER_NAME".Pak uz mas to co potrebujes a muzes pouzit neco takoveho:
PhotoButton.ImageUrl = Request.ServerVariables["SERVER_NAME"] + ("Photo/") + "" + fileName.Name;
Furt nic. Doma mi to šlape, ale jak to dám na aspone.cz tak nééé.
Stále stejná chyba
Zkoušel jsem několikrát s tím čachrovat, ale nic...
Tak tedka uz nedokazu jinak poradit,tohle uz musi fungovat.Proste to tvori natvrdo cestu k tomu obrazku.Mozna mas spatne nastaveny prava na cteni ze slozky nebo ja nevim.
Takže myslíš že je to na straně hostingu ???
Nevim,je to mozne.Free ucty tam maji docela vselijak orezany,ale zas na tohle asi ne.Spis sem zkus postnout adresu url,kterou to generuje na tom webu.
Když to dám na ten web, a spustím, tak to napíše že cesta: C:/WINDOWS/System32/ind24/Photo neexistuje ( cesta je smišlěná, už si to nepamatuju, ale bylo to velmi podobné ...
Zkoušel jsem toto:
PhotoButton.ImageUrl = Request.ServerVariables["localhost"] + ("Photo/") + "" + fileName.Name;
PhotoButton.ImageUrl = Request.ServerVariables["http://neco.aspone.cz/"] + ("Photo/") + "" + fileName.Name;
Tady mas odkaz na ty property
http://neural.cs.nthu.edu.tw/jang/sandbox/asp/examples/request5.asp
Zkus si to projit a pozkouset.Jak ti tohle uz nepujde,tak nevim.
a v tom novém kódu nelze použít if (fileName.Remove(0, fileName.Length - 3) == "jpg")
???
Pls, jak to udělat, aby se zobrazovaly pouse soubory png???
Ne,nejde to pouzit.A na co bys to taky pouzival?Mas prece tridu FileInfo,ktera ma v sobe property Extension,a ta ma v sobe ulozenou priponu.A tu zkontrolujes uz klasickym porovnanim (fileName.Extension == "png").
Zacni se ucit s msdnkou.Musis se v ni naucit orientovat a hledat to,co potrebujes:
http://msdn.microsoft.com/en-us/library/system.io.fileinfo_members.aspx
Díky, vše uš je ok, vše šlape :-)) Díky za pomoc !!!
Čau, hledám nadšence ASP.NET (klidně začátečníka), který by mi pomohl s mým webovým projektem. Hledám někoho, kdo bude rád, že má na čem dělat a na čem se učit a odměna (která bude) pro něj bude nejdříve až na druhém místě. Najde se tu takový?
Moje icq 293334455
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Tvorba adresáře na serveru - ASP.NET a C# — založil Petr Sýkora
ASP.NET a C# - dynamícká tvorba metatagů — založil plasmo
Nový ASP.NET Webhosting a ASP.NET Freehosting — založil ASPIFY.com
Hledáme programátora ASP, ASP.NET, MS SQL - Praha — založil Michaela Vorlová
ASP.NET / ASP.NET MVC — založil Otazka
Moderátoři diskuze