Вызов метода кода родительской страницы из-за кода дочерней страницы - модель наследования страниц ASP.NET 2.0 - PullRequest
0 голосов
/ 17 декабря 2008

Каков наилучший способ вызова метода в коде позади родительской страницы из кода позади дочерней страницы в модели веб-сайта ASP.NET 2.0?

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

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

if(Page.GetType().ToString().Contains("ASP.Default_aspx"))
{
    MethodInfo MyMethod = this.Parent.TemplateControl.GetType().GetMethod("MyMethod");
    MyMethod.Invoke(this.Page, null);
    MyMethod = null;
}

ОБНОВЛЕНИЕ: Я должен сделать это из кода, потому что дочерняя страница закрывается после обновления данных.

Ответы [ 3 ]

1 голос
/ 17 декабря 2008

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

Кроме этого, с помощью javascript вы можете позвонить

document.opener.location.href = "url"; 

чтобы изменить URL на родительской странице. Вы можете просто сохранить его или вставить что-то в строку запроса и изменить эти значения на Page_Load

0 голосов
/ 04 октября 2010

Не уверен, что это именно то, что вы хотите, но вы могли бы использовать для этого посты на нескольких страницах. Это позволяет вам отправлять обратно на родительскую страницу с дочерней страницы с преимуществом доступа к ViewState дочерней страницы. Для этого вы устанавливаете свойство PostBackUrl кнопки для дочерней страницы. На родительской странице вы можете получить доступ к свойству PreviousPage для получения значений с дочерней страницы. Поэтому на дочерней странице есть кнопка, такая как:

<asp:Button ID="Button1" runat="server" Text="Update data" 
        PostBackUrl="~/Parent.aspx" onclick="Button1_Click" />

Затем в событии Parent.aspx Page_Load:

protected void Page_Load(object sender, EventArgs e) {

    if (IsCrossPagePostBack) {

        Page prevPage = this.PreviousPage;
        string myVal = prevPage.FindControl("myTextBox1").ToString();
        string myVal2 = prevPage.FindControl("myTextBox2").ToString();
        //etc

    }
}
0 голосов
/ 17 декабря 2008

Если вы открываете дочернюю страницу в модальном всплывающем окне, вы можете получить доступ к window.returnValue на родительской странице (через JavaScript) и затем вызвать обновление страницы или вызов повторной привязки Ajaxy.

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

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

...