Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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# 不带页面的呈现控件_C#_Asp.net - Fatal编程技术网

C# 不带页面的呈现控件

C# 不带页面的呈现控件,c#,asp.net,C#,Asp.net,我目前正在使用一个内部框架。这一切都很好,但框架不使用aspx页面,而是使用Response.Write呈现页面。我遇到的问题是,我需要在页面上使用rad控件,所以我需要做的就是生成rad控件来获取HTML代码,以便将其转储到页面上。这可能吗?我试着创建一个页面对象来让它工作,但它不工作。似乎当调用一个页面时,它正在进行其他初始化。我还尝试将HttpContext.Current.Handler强制转换为页面,但没有成功,因为它们使用的是另一个类,而不是System.Web.UI.page来处理

我目前正在使用一个内部框架。这一切都很好,但框架不使用aspx页面,而是使用Response.Write呈现页面。我遇到的问题是,我需要在页面上使用rad控件,所以我需要做的就是生成rad控件来获取HTML代码,以便将其转储到页面上。这可能吗?我试着创建一个页面对象来让它工作,但它不工作。似乎当调用一个页面时,它正在进行其他初始化。我还尝试将HttpContext.Current.Handler强制转换为页面,但没有成功,因为它们使用的是另一个类,而不是System.Web.UI.page来处理请求

在这一点上,我不太确定还有什么可以尝试。如果我能mimc页面创建类,那就太好了。有人知道正确创建和初始化页面对象的确切步骤吗

希望这是有意义的。。。如果没有,我会尽量让它更容易理解

谢谢

更新 只是想给你我正在玩的代码。希望这将向您展示我正在尝试做的事情:

这是有效的:

HtmlForm f = new HtmlForm();
            RadEditor re = new RadEditor();
            f.ID = "form1";


            this.Page.Controls.Add(f);

            re.ID = "rdControl";

            StringBuilder sb = new StringBuilder();
            StringWriter tw = new StringWriter(sb);
            HtmlTextWriter hw = new HtmlTextWriter(tw);

            //Page p = new Page();//(Page)HttpContext.Current.Handler;

            //HtmlForm f = new HtmlForm();

            //p.Controls.Add(f);

            f.Controls.Add(re);
这不起作用:

HtmlForm f = new HtmlForm();
            RadEditor re = new RadEditor();
            f.ID = "form1";
Page p = new Page();

            p.Controls.Add(f);

            re.ID = "rdControl";

            StringBuilder sb = new StringBuilder();
            StringWriter tw = new StringWriter(sb);
            HtmlTextWriter hw = new HtmlTextWriter(tw);

            //Page p = new Page();//(Page)HttpContext.Current.Handler;

            //HtmlForm f = new HtmlForm();

            //p.Controls.Add(f);

            f.Controls.Add(re);
理想情况下,我想让第二个在某种程度上起作用,以便生成代码。抱歉弄得一团糟。这是我的测试代码

更新 所以我想了想,我想我知道问题在哪里。控件正在尝试访问dll中未包含的一组文件,如语言文件、样式、js文件等。我认为问题可能在于,当我创建页面的新实例时,它不知道该页面引用所有资源的位置。有没有办法将页面设置为“虚拟”URL?现在我正在使用以下代码:

HttpContext context = new HttpContext(new HttpRequest(string.Empty, "http://localhost:2090/default.aspx", string.Empty), new HttpResponse(null));

您可以尝试RenderControl方法,该方法将写入HtmlTextWriter

var stringWriter = new StringWriter();
var htmlWriter = new HtmlTextWriter(stringWriter);
myControl.RenderControl(htmlWriter);
var s = stringWriter.ToString();

您可以尝试RenderControl方法,该方法将写入HtmlTextWriter

var stringWriter = new StringWriter();
var htmlWriter = new HtmlTextWriter(stringWriter);
myControl.RenderControl(htmlWriter);
var s = stringWriter.ToString();

经过大量的研究,我终于找到了生成页面所缺少的内容。显然,有一个函数p.DesignerInitialize()用于初始化页面。一旦调用它,它将生成页面,并且可以从页面上呈现控件。以下是我正在使用的新函数:

public string RenderRad()
    {
        StringBuilder sb = new StringBuilder();
        StringWriter tw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(tw);

        MyPage p = new MyPage();
        p.DesignerInitialize();

        HtmlForm f = new HtmlForm();

        p.Controls.Add(f);

        f.Controls.Add(re);

        re.RenderControl(hw);

        return sb.ToString();
    }
我还有一个从页面继承的类,该类将禁用对表单中所有控件的检查:

 public partial class MyPage : System.Web.UI.Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {

        return;
    }
}

经过大量的研究,我终于找到了生成页面所缺少的内容。显然,有一个函数p.DesignerInitialize()用于初始化页面。一旦调用它,它将生成页面,并且可以从页面上呈现控件。以下是我正在使用的新函数:

public string RenderRad()
    {
        StringBuilder sb = new StringBuilder();
        StringWriter tw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(tw);

        MyPage p = new MyPage();
        p.DesignerInitialize();

        HtmlForm f = new HtmlForm();

        p.Controls.Add(f);

        f.Controls.Add(re);

        re.RenderControl(hw);

        return sb.ToString();
    }
我还有一个从页面继承的类,该类将禁用对表单中所有控件的检查:

 public partial class MyPage : System.Web.UI.Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {

        return;
    }
}

那不行。我认为它可以与普通控件一起工作,但是Rad控件使用的是页面中没有初始化的其他控件。它是自定义控件之一,好的。你应该试着在支持论坛上提问。我试过了,没有人知道。希望这里有人能给我一个主意。那不行。我认为它可以与普通控件一起工作,但是Rad控件使用的是页面中没有初始化的其他控件。它是自定义控件之一,好的。你应该试着在支持论坛上提问。我试过了,没有人知道。希望这里有人能给我一个想法。你有你开发的这个方法的例子吗?我真的很好奇,因为我正在竭尽全力让telerik控件在自定义服务器控件中以“我的”方式工作。很遗憾,他们没有更好地支持它。我猜这对用户控件不起作用,因为它们需要编译,而这段代码没有这样做。您是否有一个您开发的这种方法的示例?我真的很好奇,因为我正在竭尽全力让telerik控件在自定义服务器控件中以“我的”方式工作。很遗憾,他们没有更好地支持它。我猜这对用户控件不起作用,因为它们需要编译,而这段代码没有做到这一点。