2015-03-30 77 views
0

我试图在由C#生成的Web服务器上执行一个简单的Javascript方法。我可以让Web服务器运行并使用按钮生成一个简单的网页,但我似乎无法获得运行js的按钮。使用c在Web服务器上运行JavaScript方法#

Using System; 
using System.Net; 
using System.Threading; 
using System.Linq; 
using System.Text; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
//using System.Web.UI.Page; 

namespace SimpleWebServer 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     WebServer ws = new WebServer(SendResponse, "http://localhost:8080/test/"); 
     // ClientScript.RegisterStartupScript(page.GetType(), "hwa", "alert('Hello World');", true);  
     Console.WriteLine("A simple webserver. Press a key to quit."); 
     Console.ReadKey(); 
     ws.Stop(); 

    } 

    public static string SendResponse(HttpListenerRequest request) 
    { 
     ws = WebServer; 
    //return string.Format("<HTML><HEAD><script src='D:/Script1.js'></script></HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='buttonClicked()';></BODY></HTML>)"); 
     ClientScript.RegisterStartupScript(page.GetType(), "hwa", "alert('Hello World');", true); 
     return string.Format("<HTML><HEAD><script= alert('button click called');</HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert('button click called')';></BODY></HTML>)"); 

JS脚本代码如下:

function buttonClicked() { 
    alert('button click called'); 
} 

Web服务器的代码如下:

using System; 
using System.Net; 
using System.Threading; 
using System.Linq; 
using System.Text; 

namespace SimpleWebServer 
{ 
public class WebServer 
{ 
    private readonly HttpListener _listener = new HttpListener(); 
    private readonly Func<HttpListenerRequest, string> _responderMethod; 

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method) 
    { 
     if (!HttpListener.IsSupported) 
      throw new NotSupportedException(
       "Needs Windows XP SP2, Server 2003 or later."); 

     // URI prefixes are required, for example 
     // "http://localhost:8080/index/". 
     if (prefixes == null || prefixes.Length == 0) 
      throw new ArgumentException("prefixes"); 

     // A responder method is required 
     if (method == null) 
      throw new ArgumentException("method"); 

     foreach (string s in prefixes) 
      _listener.Prefixes.Add(s); 

     _responderMethod = method; 
     _listener.Start(); 
    } 

    public WebServer(Func<HttpListenerRequest, string> method, params string[] prefixes) 
     : this(prefixes, method) { } 
    // protected void Button1_Click(Object sender, EventArgs e) 
    // { 
    //  Button1.Text = "Server click handler called."; 
    // } 
    public void Run() 
    { 
     ThreadPool.QueueUserWorkItem((o) => 
     { 
      Console.WriteLine("Webserver running..."); 
      try 
      { 
       while (_listener.IsListening) 
       { 

        ThreadPool.QueueUserWorkItem((c) => 
        { 
         var ctx = c as HttpListenerContext; 
         try 
         { 
          string rstr = _responderMethod(ctx.Request); 
          byte[] buf = Encoding.UTF8.GetBytes(rstr); 
          ctx.Response.ContentLength64 = buf.Length; 
          ctx.Response.OutputStream.Write(buf, 0, buf.Length); 
         } 
         catch { } // suppress any exceptions 
         finally 
         { 
          // always close the stream 
          ctx.Response.OutputStream.Close(); 
         } 
        }, _listener.GetContext()); 
       } 
      } 
      catch { } // suppress any exceptions 
     }); 
    } 

    public void Stop() 
    { 
     _listener.Stop(); 
     _listener.Close(); 
    } 
} 
} 
+0

我发现的最有用的建议是在这里:[链接] http://stackoverflow.com/questions/5731224/calling-javascript-function-from-codebehind [/ link] 我不确定这里的规则的细节,但我已经尽力实施它,但对任何一种语言的知识都有限我被卡住了 – 2015-03-30 23:08:14

+0

你有一个第一行中的拼写错误,使用应该是小写使用。不知道它会帮助虽然.. – torox 2015-03-30 23:11:26

回答

0

的HTML和JavaScript是错误的这行代码

return string.Format("<HTML><HEAD><script= alert('button click called');</HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert('button click called')';></BODY></HTML>)"); 

它应该厕所K类似于下面

<HTML> 
<HEAD> 
    <script> 
     alert('button click called'); 
    </script> 
</HEAD> 
<BODY> 
    <INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert("button click called");'> 
</BODY> 
</HTML> 

的代码与下面的代码替换你的回报statment:

return string.Format("<HTML> <HEAD><script>alert('button click called');</script> </HEAD> <BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert("button click called");'></BODY></HTML>"); 
+0

这是非常有帮助的,每当页面加载脚本运行,所以我现在知道任务是可能的... 我遇到的主要问题是让服务器识别按钮单击并在这种情况发生时运行JS文件/命令,不知道这怎么可能?我目前正在阅读http监听器等,试图自己解决它,如果我设法得到任何东西,将回到这里... – 2015-03-31 14:54:46

+0

添加Web服务器代码,可能有帮助 – 2015-03-31 15:03:10

相关问题