![](/img/trans.png)
[英]By the click of a c# asp.net button on a form, how can I execute a line of code before moving on to the next lines of code?
[英]How I can execute C# code using Roslyn in ASP.Net web form?
我在ASP.Net中有足够的代码来使用roslyn编译器执行C#的代码。 但是,我使用ASP.Net Web表单来构建用于执行代码的用户界面。 因此,我想从一个文本框中获取代码,并通过“编译”按钮在另一个文本框中显示结果。
因此,我有以下控件:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>Compiler Tool</h1>
</hgroup>
<p>
You can compile your source code of C# using Roslyn Compiler from Microsoft</p>
<br/>
<p>
<asp:TextBox ID="TextBox3" runat="server" Height="185px" Width="480px" OnTextChanged="TextBox3_TextChanged"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button2" runat="server" onclick="Button_Click" Text="Compile" ForeColor="Black" />
</p>
<p>
<asp:TextBox ID="TextBox2" runat="server" Height="138px" Width="390px" ></asp:TextBox>
</p>
</div>
</section>
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
</asp:Content>
这里是使用C#的Handler事件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;
namespace WebApplication2
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
var engine = new ScriptEngine();
var session = engine.CreateSession();
String code = TextBox3.Text;
session.Execute(code);
}
protected void TextBox3_TextChanged(object sender, EventArgs e)
{
}
}
}
如何显示TextBox2中代码(TextBox3)的执行结果?
Iam在ASP.Net环境中的初学者,有帮助吗?
恐怕我离开发人员电脑不远,所以我无法测试代码,但是想到的是:
您没有使用session.Execute(code);
的结果session.Execute(code);
,因此,如果用户输入3+3
,它将被执行,返回值将为6,但由于未捕获,因此将超出范围。 如果相反,则您的object result = session.Execute(code);
,输出将为整数6; 然后,您可以在result
上调用.ToString()并将其放在文本框中。
当然要小心,允许用户在您的Web服务器上执行任意代码...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.