30. juni 2008 - 09:02Der er
4 kommentarer og 1 løsning
Programmerings teknisk ting
Hej,
Jeg håber en eller anden kan hjælpe mig med at forstå....
Jeg har en procedure, som fungerer ganske glimrende, hvis jeg har den i codebehind filen, på den side som skal bruge den.
Nu skal jeg bruge metoden på flere forskellige filer, og går jo ind for genbrug, så jeg vil smække den ud i sin egen klasse, hvor jeg så gerne ville referere til den. Det skal siges, jeg bruger nøjagtig identiske usin direktiver på begge sider. Gør jeg dog dette, får jeg følgende fejl:
1) The name 'Server' does not exist in the current context 2) The name 'ResolveUrl' does not exist in the current context
Her ser i hvordan, jeg har forsøgt at lægge den ud i sin egen klasse:
using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.IO;
/// <summary> /// Summary description for Images /// </summary> public class Images { public Images() { }
//30-06-2008 AS //Henter Billeder fra fysisk mappe public DataTable GetImagesFromFolder(string imagefolder) { DataTable datatable = new DataTable(); datatable.Columns.Add("imgImage", typeof(string)); datatable.Columns.Add("filename", typeof(string)); DataRow datarow;
//Sætter hvilke billedtyper der skal vises i gridviewet string strFilter = "*.jpg;*.png;*.gif"; string[] m_arExt = strFilter.Split(';'); foreach (string filter in m_arExt) { //Henter de forskellige billedtyper ud i et loop int i = 1; foreach (string file in Directory.GetFiles(Server.MapPath(imagefolder) + "\\", filter)) { datarow = datatable.NewRow();
Hmmmmmm skidt pyt - jeg fandt en anden løsning på nettet angånede ResolveUrl...
public static string ResolveUrl(string originalUrl) { if (originalUrl == null) return null;
// *** Absolute path - just return if (originalUrl.IndexOf("://") != -1) return originalUrl;
// *** Fix up image path for ~ root app dir directory if (originalUrl.StartsWith("~")) { string newUrl = ""; if (HttpContext.Current != null) newUrl = HttpContext.Current.Request.ApplicationPath + originalUrl.Substring(1).Replace("//", "/"); else // *** Not context: assume current directory is the base directory throw new ArgumentException("Invalid URL: Relative URL not allowed.");
// *** Just to be sure fix up any double slashes return newUrl; }
return originalUrl; }
Men forstår så ikke hvorfor det skulle være nødvendigt at skrive HTTPContext.current.Server for at få fat i Server?
Og hvorfor det er nødvendigt med den her ResolveUrl metode?
Håber du gider at forklare, så jeg også lærer noget - men ellers tak for hjælpen :-)
Well, er ikke selv helt 100%, men her kommer et gæt. Når du laver en klasse, er det jo ikke specifikt web mere. Det vil sige, at du i teorien kan kalde den samme kode fra f.eks. en winform.
Hvis du tilgængæld ved, at koden kun skal kaldes fra web, kan du hente HTTPContext.current, og få alle informationer der er tilgænglige når du koder websiden.
Jamen det er jo indlysende...... Har slet ikke selv tænkt i de baner - rigtig mange tak :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.