繁体   English   中英

在桌面应用程序中渲染ASP.NET控件?

[英]Render ASP.NET controls in a desktop application?

是否可以获取页面对象,或者只是一个ASP.NET控件,并以某种方式在桌面应用程序中呈现它?

例如,作为桌面应用程序的Visual Studio在设计图层中呈现ASP.NET控件。 我想做类似的事情。

编辑:我正在集思广益,如何为一个非常简单的数据输入应用程序创建一个非常简单的设计器。 我会有一些自定义的ASP.NET数据输入控件,我希望非专业用户能够看到尽可能接近的页面。 所以我希望应用程序中的一个面板显示渲染的控件集合,但面板不需要以任何方式进行交互。 即,没有单击和拖动或调整控件等大小。将有表单作者与之交互的标准窗体控件,用于定义页面的布局。

我将简单地保存他们添加的控件列表以及“设计人员”(非技术专家)提供的其他信息,我将使用该信息稍后通过手动或自动过程创建实际的aspx页面,待定。

对的,这是可能的。

你需要创建一个单独的AppDomain用于ASP.Net,描述在这里

编辑 :要呈现页面,请使用以下代码:

string htmlSource;
var page = (Page)BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page));

page.ProcessRequest(new HttpContext(new SimpleWorkerRequest("", null, null)));
using (var writer = new StringWriter(CultureInfo.InvariantCulture)) {
    using (var htmlWriter = new HtmlTextWriter(writer))
        page.RenderControl(htmlWriter);
    htmlSource = writer.ToString();
}

请注意,此代码必须在ASP.Net AppDomain中运行。
为此,您可以放入一个您为CreateApplicationHost提供的类型的公共方法。

我无法在这里获得流行的答案。 但是,这似乎有效:

public string AspxToString(string aspx)
{
    StringBuilder sb = new StringBuilder();
    using (StringWriter sw = new StringWriter(sb))
    {
        using (HtmlTextWriter tw = new HtmlTextWriter(sw))
        {
            var workerRequest = new SimpleWorkerRequest(aspx, "", tw);
            HttpContext.Current = new HttpContext(workerRequest);

            object view = BuildManager.CreateInstanceFromVirtualPath(aspx, typeof(object));

            Page viewPage = view as Page;
            if (viewPage == null)
            {
                UserControl viewUserControl = view as UserControl;
                if (viewUserControl != null)
                {
                    viewPage = new Page();
                    viewPage.Controls.Add(viewUserControl);
                }
            }

            if (viewPage != null)
            {
                HttpContext.Current.Server.Execute(viewPage, tw, true);

                return sb.ToString();
            }

            throw new InvalidOperationException();
        }
    }
}

如果您从桌面应用程序运行它,您将需要一个AppDomain,请参阅是否有办法从非Web应用程序处理MVC视图(aspx文件)?

我不认为这是可能的,但你可以通过WebBroswer控件加载asp.net网页。

是的,它应该是可能的。 要渲染它意味着获取控件的html,我不确定如何在应用程序中使用该HTML。

本文“ 使用ASP.Net运行时使用动态HTML脚本扩展桌面应用程序 ”,提供了一个如何运行嵌入式ASP.net运行时的示例,该运行时超出了已接受答案中显示的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM