Загрузить страницу aspx ASP.NET 2.0 с помощью System.Reflection?
-
22-08-2019 - |
Вопрос
Могу ли я загрузить отдельную страницу aspx на другую отдельную страницу aspx с помощью System.Reflection?
Я использую модель проекта веб-сайта ASP.NET 2.0.
Решение
Попробуйте использовать BuildManager.CreateInstanceFromVirtualPath.Пример использования:
Page p = BuildManager.CreateInstanceFromVirtualPath("~/Default.aspx", typeof(Page))
Это ответ на этот конкретный вопрос, хотя, судя по вашим комментариям, я не уверен, что вы действительно этого хотите.
Другие советы
Не знаю, как сделать это с помощью Reflection, что вполне возможно, но вы можете перехватить вывод страницы aspx или asp в средство записи строк с помощью HttpContext.Server.Execute().
Я использовал это для рендеринга некоторых сложных шаблонов электронной почты, но не знаю, действительно ли это то, что вам нужно.
Если у вас есть унаследованный класс от UI.Page для вашего кода страницы, вы можете использовать этот способ:установите CONTEXT в ваш текущий контекст http
Dim hndlr As IHttpHandler = PageParser.GetCompiledPageInstance("~/mypage.aspx", context.Server.MapPath("~/mypage.aspx"), CONTEXT)
Dim ipage As DerivedPage = DirectCast(hndlr, DerivedPage)
ipage.YourProperty= "Hello"
ipage.DoIt()
Таким образом, вы можете иметь строго типизированные значения, и если вы измените знак метода, вы получите предупреждение.
Я реализовал следующее решение, и это именно то, что я хочу сделать:
using System.Reflection;
using System.Web.Compilation;
Page p = BuildManager.CreateInstanceFromVirtualPath("~/mypage.aspx", typeof(Page)) as Page;
MethodInfo MyMethod = p.GetType().GetMethod("MyMethod");
MyMethod.Invoke(p, null);