Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Global.asax呈现asp.net Web表单页面?_C#_Asp.net_Webforms_Global Asax - Fatal编程技术网

C# 如何从Global.asax呈现asp.net Web表单页面?

C# 如何从Global.asax呈现asp.net Web表单页面?,c#,asp.net,webforms,global-asax,C#,Asp.net,Webforms,Global Asax,出于这样或那样的原因,我在玩一个“极简”的ASP.Net只是为了好玩。我已经禁用了很多东西,正在尝试重新实现这些东西。有一件事我不太清楚,那就是如何呈现ASP.Net页面(aspx) 这是我目前的进展: //global.asax protected virtual void Application_BeginRequest (Object sender, EventArgs e) { HtmlTextWriter writer=new HtmlTextWrite

出于这样或那样的原因,我在玩一个“极简”的ASP.Net只是为了好玩。我已经禁用了很多东西,正在尝试重新实现这些东西。有一件事我不太清楚,那就是如何呈现ASP.Net页面(aspx)

这是我目前的进展:

//global.asax
    protected virtual void Application_BeginRequest (Object sender, EventArgs e)
    {
        HtmlTextWriter writer=new HtmlTextWriter(Response.Output);
        if(Request.Url.AbsolutePath.Substring(0,Math.Min(Request.Url.AbsolutePath.Length,8))=="/static/"){
            return; //let it just serve the static files
        }else if(Request.Url.AbsolutePath=="/test1"){
            test1 o=new test1();
            o.ProcessRequest(Context);
            o.RenderControl(writer);
            writer.Flush();
            writer.Close();
            Response.Flush();
        //  Response.Write(writer.ToString());

        }else{
            Response.ContentType="text/plain";
            Response.Write("Hi world!");
        }
        CompleteRequest();
    }
/static/bit与“hi-world”一样工作。不过,我无法让
/test1
路线正常工作。它到达了那个点,但显示的只是一个黑色页面

我有一个包含以下设计器内容的test1.aspx页面:

<%@ Page Language="C#" Inherits="namespace.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>test1</title>
</head>
<body>
    <form id="form1"> <!--just testing if two forms works and such-->

    </form>
    <form id="form2">
    <input type="text" id="test1" />
    </form>
</body>
</html>

测试1
而且它几乎没有代码隐藏(只是一个空函数,这无关紧要)


我在这里做错了什么?

您可以在这里使用
HttpContext.Current.Server.Execute
。请看。

我的第一个想法是,你不要称之为隐藏。我不确定在这种情况下它是否真的对你有帮助

我还相信,这将直接呈现给提供的HttpContext。请参阅Reflector中的ProcessRequestMain,在渲染期间它调用
this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output))

我们无法查看您从何处获得请求和响应对象。您是否检查了作为
发送方发送给您的HttpApplication
参数,以确保使用了正确的对象?

本文显示。这可能会有所帮助。

Global.asax是一种转移注意力的方法。ASP.NET正在成功呈现您请求的页面:

test1 o=new test1();
test1
是test1.aspx页面的代码隐藏类。这不是你想要的,明白吗?您希望看到的所有内容都来自test1.aspx文件。您需要做的是告诉ASP.NET将test1.aspx呈现给响应。输出:

using (var o = (Page) BuildManager.CreateInstanceFromVirtualPath("/test1.aspx", typeof (Page))) {
    o.ProcessRequest(Context);
}

是的,它们是正确的请求和响应对象,就像内置在global.asax类中一样