您的位置:首页 > Web前端 > JavaScript

c#中实现类似js的Eval|.NET中执行Javascript(表达式是字符串的计算)

2011-05-12 14:00 851 查看
我们一般只知道javascript中有个eval方法,其实在c# 中也有这样一个方法,下面我们讲解c#中Eval的使用方法。

第一步在你的项目中添加Microsoft.Vsa和Microsoft.JScript两个程序集,下面我们就可以使用Microsoft.JScript下面的Eval方法了
Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
object ret = Microsoft.JScript.Eval.JScriptEvaluate(Expression, ve);
其中Expression为表达式,比喻说我们要实现1+28×678-38,那么就可以写成object ret = Microsoft.JScript.Eval.JScriptEvaluate("1+28×678-38", ve);得出的ret 就是您要的结果了,注意ret是个object,然后将其转换成您需要的类型就可以了!
下面一个例子希望对你有帮组:
using

public partial class JavaScriptEval : System.Web.UI.Page
{
public static Microsoft.JScript.Vsa.VsaEngine Engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();

public static object EvalJScript(string JScript)
{
object Result = null;
try
{
Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
}
catch (Exception ex)
{
return ex.Message;
}

return Result;
}

public void Page_Load(object sender,EventArgs e)
{
// *** String Value
object Result = EvalJScript(@"('hello world: ' + new Date())");
Response.Write( Result.ToString() );
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");

// *** Return an integer or numeric - no conversion required
Result = EvalJScript(@"( 11 * 12)");
Response.Write(Result.ToString());
Response.Write(" Type: " + Result.GetType().Name);
Response.Write("<hr>");

// *** Date value - must be converted!
Result = EvalJScript(@"(new Date())");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name + "<br>");

// *** Must convert from DateObject to DateTime by coercing
DateObject dateObject = Result as DateObject;

Result = Microsoft.JScript.Convert.Coerce(Result,typeof(DateTime));
Response.Write("Converted to DateTime: " + Result);
Response.Write("<hr>");

// *** Block of code (last assignment is the return value)
Result = EvalJScript(@"var out = 'hello'; for ( var x = 1; x < 10; x++) { out = out + 'Line ' + x + '<br>'; }");
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");

/// *** Closure - calling a JavaScript Function with return value
Result = EvalJScript(@"( function Test(inputParm) { return 'hello world ' + inputParm; } )");

/// *** Invoke the function and retrieve the result
Closure close = Result as Closure;

// *** This requires full trust
Result = close.Invoke(close, new object[1] { "Start with this bub..." });
Response.Write(Result);
Response.Write(" - Type: " + Result.GetType().Name);
Response.Write("<hr>");

// *** JSON style object
Result = EvalJScript(@"( {""timeString"":'Time is: ' + new Date(),""dateValue"":new Date()} )");

JSObject obj = Result as JSObject;
Response.Write(Result);

// *** JavaScript style property array access can be used
object val = obj["dateValue"];

Response.Write(Microsoft.JScript.Convert.Coerce(val,typeof(DateTime)));

val = obj["timeString"];

Response.Write(val);
}
}

Microsoft.JScript;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: