Hej, Er det muligt at kalde en funktion der er del af .net miljøet i c#. Det jeg vil er at man i html kode kan skrive fx en string funktion, som bliver afviklet serverside, og resultatet af den bliver send ud sammen med mit site.
Udfordringen er at jeg har mine html tags liggende i min database, og der henter jeg så min html kode der bliver sendt til clienten. I mine text tags vil jeg så have mulighed for at skrive <input type="text" name="dato" value="en .net funktion">
Hvis du vil lave noget snavs, saa var det en mulighed at du lave noget soeg og erstat paa det du henter ud fra databasen. Regex.Replace kunne formentligt bruges.
Ja jeg ved det er noget snavs, men brugerne skriver almindelig html so bliver gemt i databasen, hvorefter html´en bliver knyttet til et sitemap, som de så fremover klikker på og får så vist html´en i browseren. Text input værdierne bliver brugt som parametre til en database forespørgsel, og jeg ville frygtelig gerne have det sådan at man fx kan skrive en funktion i value på inputfelterne således at man fx får datoen for idag i feltet eller dato-1 for i går.
Hej igen, tak for svar løsningen kan godt laves sådan, men jeg havde håbet på at man kunne anvende .net ´s tilgængelige funktioner, uden at implementere dem med case sætningen som du gør i eksemplet...
Jeg har nu prøvet dit eksempel. Jeg kan ikke finde using Microsoft.JScript; så jeg anvendte istedet using Microsoft.CSharp; og så erstattede jeg CodeDomProvider comp = new JScriptCodeProvider(); med CodeDomProvider comp = new CSharpCodeProvider(); og det ser ud til at fungere.
Jeg får dog en fejl i Process funktionen: res = res.Replace(m.Groups[0].Value, JS.Eval(m.Groups[1].Value)); .. fejlen er som følger:
The type initializer for 'E.JS' threw an exception. System.Collections.ListDictionaryInternal
Er der noget galt med grupperne i det regulære udtryk, eller hvad tror du er galt ?
Du er genial, det virker. Jeg har prøvet det i et consol program, men jeg skal bruge løsningen i en website.
Når jeg implementerer løsningen i min aspx side fungerer det ikke. Jeg får følgende fejl: Could not load file or assembly 'file///c:\en path\temp\ubl3d8hm og en anden fil kaldet rcwhtqhc.dll
Jeg kan godt få det til at virke i ASP.NET sammenhæng.
using System; using System.Text.RegularExpressions; using System.Reflection; using System.CodeDom.Compiler;
using Microsoft.JScript;
namespace E { public interface IJS { string Eval(string expr); } public class JS { private static IJS engine; static JS() { string src = "import System; import E; public class C implements IJS { public function Eval(expr : String) : String { return eval(expr); } }"; CodeDomProvider comp = new JScriptCodeProvider(); CompilerParameters param = new CompilerParameters(); param.GenerateInMemory = true; param.ReferencedAssemblies.Add("System.dll"); param.ReferencedAssemblies.Add(System.Reflection.Assembly.GetExecutingAssembly().Location); CompilerResults res = comp.CompileAssemblyFromSource(param, src); Assembly asm = res.CompiledAssembly; engine = (IJS)asm.CreateInstance("C"); } public static string Eval(string expr) { return engine.Eval(expr); } } public static class Util { private static readonly Regex re = new Regex("(?:@@)(.*?)(?:@@)", RegexOptions.Compiled); public static string Process(string s) { string res = s; foreach(Match m in re.Matches(s)) { res = res.Replace(m.Groups[0].Value, JS.Eval(m.Groups[1].Value)); } return res; } } }
buildes til Eval.dll og smides i bin dir.
<%@ import namespace="E" %> <script language="C#" runat="server"> void Page_Load(Object sender, EventArgs e) { result.Text = Util.Process("bla bla @@DateTime.Now.ToString()@@ bla bla "); } </script> <asp:label id="result" runat="server"/>
viser så det som den skal.
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.