Загрузить страницу aspx ASP.NET 2.0 с помощью System.Reflection?

Могу ли я загрузить автономную страницу aspx на другую автономную страницу aspx с помощью System.Reflection?

Я использую модель проекта веб-сайта ASP.NET 2.0.


person Michael Kniskern    schedule 17.12.2008    source источник
comment
Я проверил определение проблем масштабирования и нашел это.   -  person    schedule 18.12.2008
comment
Я знаю, что это не лучшая практика, но я пытаюсь обновить родительскую страницу aspx с дочерней страницы aspx. Я не нахожу никаких идей. Также см.: stackoverflow.com/questions/375977/   -  person Michael Kniskern    schedule 18.12.2008


Ответы (4)


Попробуйте использовать BuildManager.CreateInstanceFromVirtualPath. Пример использования:

Page p = BuildManager.CreateInstanceFromVirtualPath("~/Default.aspx", typeof(Page))

Это отвечает на этот конкретный вопрос, хотя, основываясь на ваших комментариях, я не уверен, что это то, чего вы действительно хотите.

person Mauricio Scheffer    schedule 18.12.2008

Не знаю, как сделать это с помощью Reflection, что вполне возможно, но вы можете записать вывод страницы aspx или asp в средство записи строк, используя HttpContext.Server.Execute().
Я использовал это для рендеринга. некоторые сложные шаблоны электронной почты, но не уверен, что это именно то, что вам нужно.

person seanb    schedule 18.12.2008

Если у вас есть класс, унаследованный от 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()

Таким образом, вы можете иметь строго типизированные значения, и если вы измените знак метода, вы будете предупреждены.

person Andrea Celin    schedule 18.12.2008
comment
Это вызовет ошибку, потому что компилятор не найдет ручную переменную. - person Michael Kniskern; 19.12.2008

Я реализовал следующее решение, и это именно то, что я хочу сделать:

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);
person Michael Kniskern    schedule 18.12.2008