app_code, изменить элемент на странице aspx

Надеюсь, это выяснится достаточно ясно.

Я новичок во всем этом.

У меня есть проект asp.net и С #, в app_code у меня есть класс userInterface.cs, мне нужно сделать следующее:

В этом классе мне нужно получить определенную страницу

NewPage.aspx

, и изменить некоторые элементы asp на этой странице.

В настоящее время у меня есть это:

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

Не уверен, что еще мне нужно, чтобы получить страницу. страница, которую я хочу, называется NewPage.aspx.

Буду признателен за любой ответ.

даже что-нибудь погуглить, чтобы найти, будет здорово. я не знаю, с чего начать ....


person Ovi    schedule 23.08.2011    source источник
comment
ваш проект веб-сайт или веб-приложение?   -  person Amir Ismail    schedule 23.08.2011


Ответы (5)


Вы можете получить доступ к странице через HttpContext, но это, вероятно, не лучший подход. Как отмечали другие плакаты, просто используйте метод и передайте ссылку на элемент управления.

Однако, чтобы ответить на ваш вопрос, вы можете попробовать что-то вроде этого:

if (HttpContext.Current.Handler is Page)
{
    Page currentPage = (Page)HttpContext.Current.Handler;
    if (currentPage != null)
    {
        //depending on where the control is located, you may need to use recursion
        GridView gridView = currentPage.FindControl("GridView1");
    }
}

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

person James Johnson    schedule 23.08.2011
comment
Спасибо, я искал этот ответ, это то, что мне нужно сделать. но после того, как я сделаю это выше, gridView будет равен нулю, и у меня есть этот элемент управления с идентификатором на моей странице. есть идеи, почему это не работает? Буду признателен за быстрый ответ. - person Ovi; 28.08.2011
comment
Что вы имеете в виду под этим: '// в зависимости от того, где расположен элемент управления, вам может потребоваться рекурсия' мой элемент управления находится на странице aspx, которая обнаруживается, когда я делаю 'Page currentPage = (Page) HttpContext.Current.Handler ; ' - person Ovi; 28.08.2011
comment
this 'GridView gridView = currentPage.FindControl (GridView1);' возвращает ноль - person Ovi; 28.08.2011
comment
@ovi: я имел в виду, что он может быть вложен в другой элемент управления, такой как панель, заполнитель и т. д. Найдите здесь рекурсивный поиск элемента управления на странице; примеров должно быть много. Я опубликовал несколько примеров, так что вы можете просмотреть мои ответы, если хотите. - person James Johnson; 28.08.2011

Вы можете создать метод в классе App_Code и вызвать этот метод из любого события в вашем коде. Вы можете передать свой GridView или всю страницу в этот метод.

Это ваше событие Page_Load, расположенное в вашем файле кода.

protected void Page_Load(object sender, EventArgs e)
{
    UserInterface.UpdateGrid(ref GridView1);
}

Это статический метод, расположенный в вашем CS-файле.

public static void UpdateGrid(ref GridView view)
{
    // update your GridView here
}
person emre nevayeshirazi    schedule 23.08.2011

Я думаю, что вы не можете сделать это на своем веб-сайте, но вы можете создать метод в своем App_Code файле, который вы сможете вызывать со своей страницы и передавать управление этому методу для доступа к нему оттуда.

Обновить

Я твой App_Code файл

using System.Web.UI.WebControls;

public static void AddColumn(ref GridView gv)
    {
        BoundField field1=new BoundField();
        field1.HeaderText="Header Text";
        field1.DataField = "DataFieldName";
        gv.Columns.Add(field1);


        BoundField  field2 = new BoundField();
        field2.HeaderText = "Header Text";
        field2.DataField = "DataFieldName";
        gv.Columns.Add(field2);
    }

на твоей странице

Test.AddColumn(ref MyGridView);
MyGridView.DataSource = names;// assign your datasource here
MyGridView.DataBind();
person Amir Ismail    schedule 23.08.2011
comment
а затем, когда я это сделаю, я могу изменить элемент управления? Мой элемент управления - это gridView, который после добавления столбцов в класс app_code мне нужно повторно распечатать сетку с новой информацией на странице. - person Ovi; 23.08.2011
comment
поэтому вы должны передать его по ссылке - person Amir Ismail; 23.08.2011
comment
@ Miroprocessor - я обнаружил, что где-то такая же проблема, и там сказано использовать это: Map map = (Map) LoadControl (~ / Controls / map.ascx); Как сделать так, чтобы имя моей страницы тоже было типом? у тебя есть идеи? потому что это именно то, что мне нужно - person Ovi; 23.08.2011
comment
ссылка найдена здесь - person Ovi; 23.08.2011
comment
Вы не можете использовать LoadControl для загрузки своей страницы, потому что ваша страница не наследуется от System.Web.UI.UserControl - person Amir Ismail; 23.08.2011

Если вы пытаетесь получить доступ к странице .aspx из своего класса App_Code, с вашим кодом что-то не так. Вы не должны этого делать. Классы из App_Code предназначены для обслуживания ваших страниц .aspx, а не наоборот. Например, в App_Code вы храните классы утилит.

person all4code    schedule 23.08.2011
comment
Вы не можете использовать эту страницу p = (Page) HttpContext.Current.Handler; чтобы получить его, а затем выполните приведение следующего вида: NewPage p1 = (NewPage) p ;? - person Ovi; 23.08.2011

Если страница содержимого (ASPX) привязана к главной странице. Вам необходимо рассмотреть возможность размещения родительского элемента управления на странице содержимого. Например, если главная страница содержит заполнитель содержимого и внутри этого держателя вы привязываете страницы, необходимо сначала найти заполнитель содержимого.

Page p = HttpContext.Current.Handler as Page;
Label lbl = p.Form.FindControl("ContentPlaceHolder1").FindControl("UpdatePanel1").FindControl("lblTest") as Label

При компиляции запроса в ответ ASP.Net всегда просматривает файл главной страницы (если он есть), чтобы перейти к странице содержимого. Поэтому при запросе элемента управления страницей в любом файле .aspx из класса необходимо сначала найти родительский элемент управления внутри главной страницы.

person Jabed    schedule 27.07.2016