Forum > ASP.NET 1.x och 2.x > Språk - C#
Tjenare!
Nu är jag här och tjatar igen. jag vill skicka iväg två variabler i en return, men märkte fort att det inte gick.
Ska jag göra en separat funktion som man laddar in, eller ska jag försöka göra en array?
Min kod:
http://aspkoll.se/code/Index.asp?id=540
/J.
Jag hade retunerat en arrayList av strängar, eller en eget objekt med Thumbnail nanet och en med Orginal namnet (hellre andra altenativet i mitt tycke)
Flyttat tråden från ASP forumet ;) eftersom det ser ut som .NET kod i alla fall
Okej, jag testade detta;
var allFiles = new ArrayList {fileNames, fileNames2};
return (string[]) allFiles.ToArray(typeof (string));
Det fungerade inte riktigt, vad kan vara fel?
Ett exempel på en arraylist med en egen klass:
private ArrayList ImageList()
{
ArrayList returnList = new ArrayList();
for(int i = 0;i<10;i++)
{
returnList.Add(new imageData("org_" + i, "thumb_" + i));
}
return returnList;
}
class imageData
{
private string originalFileName, thumbnailFileName;
public imageData(string OriginalFileName, string ThumbnailFileName)
{
originalFileName = OriginalFileName;
thumbnailFileName = ThumbnailFileName;
}
public string OriginalFileName
{
set { originalFileName = value; }
get { return originalFileName; }
}
public string ThumbnailFileName
{
set { thumbnailFileName = value; }
get { return thumbnailFileName; }
}
}
ImageData? Vad är det för något, försökte använda det, men visual studio accepterade inte det.
Hur använder jag mig av det, koll lite fort på msdn, men fick inget bra svar.
Läs koden, dom kommer aldrig hitta den i MSDN eftersom jag har ju skapat en egen klass:
class imageData
{
private string originalFileName, thumbnailFileName;
public imageData(string OriginalFileName, string ThumbnailFileName)
{
originalFileName = OriginalFileName;
thumbnailFileName = ThumbnailFileName;
}
public string OriginalFileName
{
set { originalFileName = value; }
get { return originalFileName; }
}
public string ThumbnailFileName
{
set { thumbnailFileName = value; }
get { return thumbnailFileName; }
}
}
Hah! Quite obvious. ;)
stötte på ett annat problem nu.
protected string[] GetUploadList()
{
string folderThumbs = Server.MapPath("App_Data/uploads/thumbs/");
string folderOrig = Server.MapPath("App_Data/uploads/original/");
string[] files = Directory.GetFiles(folderThumbs);
string[] files2 = Directory.GetFiles(folderOrig);
string[] fileNames = new string[files.Length];
string[] fileNames2 = new string[files2.Length];
Array.Sort(files);
Array.Sort(files2);
for (int i = 0; i < files.Length; i++)
{
fileNames[i] = Path.GetFileName(files[i]);
}
for (int i = 0; i < files2.Length; i++)
{
fileNames2[i] = Path.GetFileName(files2[i]);
}
return fileNames;
}
jag vill att fileName ska ge ut de olika sökvägarna, men ska skicka dem till en hyperlink som ser såhär:
<asp:HyperLink
ID="FileLink"
NavigateUrl='<%# "App_Data/uploads/original/" + Container.DataItem.ToString() %>'
Text='<%# Container.DataItem.ToString() %>'
runat="server" />
Eftersom att min return inte skickar ut sökvägarna samtidigt kan den inte lista båda mapparnas innehåll.
Det
som gör mig galen är att om jag sätter ihop fileName och filName2 i en
string[] skickas det exakt samtidigt så inte hyperlinken skilja ut vad
den ska visa.
Hade en idé om att man kunde samlat ihop de båda variablerna genom att ta bort fileName och fileName2 och ersätta det med:
string[] files = Directory.GetFiles(folderThumbs);
string[] files2 = Directory.GetFiles(folderOrig);
string[] fileNames = new string[files.Length+files2.Length];
Men det failade. Någon som har en bra idé?
/J.
Dog tråden nu? =/
Du retunera ju bara en String object.
Sen retunera du filnamnet, hade det inte varit bättre att retunera mappath + filen så är det ju bara att köra
Heter filerna detsamma? är det bara mappen som är "problemet"? då hade du ju bara kunnat retunera filnamnet och kör:
<%# "App_Data/uploads/original/" + Container.DataItem.ToString() %>
och
<%# "App_Data/uploads/thumb/" + Container.DataItem.ToString() %>
jo, som det är i den koden ovan är det bara en variabel jag skickar, men det jag egentligen är ute efter är:
string[] files = Directory.GetFiles(folderThumbs);
string[] files2 = Directory.GetFiles(folderOrig);
string[] fileNames = new string[files.Length+files2.Length];
return filenames();
Eller något i den stilen i vart fall.
Men går det att köra <%# "App_Data/uploads/original/" + Container.DataItem.ToString() %> två olika sådana i en hyperlink? Det borde bli samma felmeddelande, eller har jag missupfattat dig helt nu?
/J.
string[] fileNames = new string[files.Length+files2.Length];
Hah, det märks att jag är nybörjare med andra ord. ;)
Det stora problemet är väl egentligen att jag inte kan skicka två strängar med en return till min hyperlink, gör det göra någon form av loop som skickar över sökvägarna en och en ?
Om du skall retunera två strängar så kan du inte retunera det på det sätt du gör nu, du retunera alla bilder du ladda upp, och lägger in varje bild i en array, du måste ha ett objekt som du kan ha mer än ett värde i en array.
Okej då. Men jag löste det genom att strunta i de två mapparna, merge:a dom till en mapp istället och lägga till "_th" på alla thumbnails som laddas upp.
Orkar inte krångla när jag inte förstår det riktigt ännu, det åker in och ut lika bort igen.
Jag vill ännu en gång tacka så mycket för all hjälp, och för din tid!
/J.
/// <summary>
/// Create a list with all the images
/// </summary>
/// <returns></returns>
private ArrayList ImageList()
{
string folderThumbs = Server.MapPath("App_Data/uploads/thumbs/");
string[] ThumbFiles = Directory.GetFiles(folderThumbs);
string folderOrig = Server.MapPath("App_Data/uploads/original/");
string[] OriginalFiles = Directory.GetFiles(folderOrig);
ArrayList returnList = new ArrayList();
for(int i = 0;i<ThumbFiles.length;i++)
{
returnList.Add(new imageData(OriginalFiles[i], ThumbFiles[i]));
}
return returnList;
}
ArrayList b = ImageList();
images.DataSource = b;
images.ItemDataBound += images_DataBinding;
images.DataBind();
void images_DataBinding(object sender, RepeaterItemEventArgs e)
{
Image image = e.Item.FindControl("image") as Image;
HtmlAnchor link = e.Item.FindControl("link") as HtmlAnchor;
imageData data = e.Item.DataItem as imageData;
if (data != null && link != null && image !=null)
{
image.ImageUrl = "App_Data/uploads/thumbs/" + data.ThumbnailFileName;
link.HRef = "App_Data/uploads/thumbs/" + data.OriginalFileName;
}
}