从子页面代码隐藏方法调用父页面代码隐藏方法 - ASP.NET 2.0 页面继承模型

发布于 2024-07-11 01:32:42 字数 507 浏览 11 评论 0原文

在 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;
}

更新:我必须从后面的代码执行此操作,因为子页面在数据完成后关闭已更新。

What would be the best way to call a method in the code-behind of parent page from the code behind of the child page in the ASP.NET 2.0 Web Site model?

Scenario: User clicks a link in the parent page to view a data record's detail in child page (The parent and child are tow seperate pages). The user will modified the data in the client page. Once the child page has processed the update, the child page will close and I need to rebind the parent page to reflect the update.

I did something similar, but it was calling the parent page from a user control that was included in the parent page

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

UPDATE: I have to do this from the code behind because the child page closes after the data has been updated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一个人的旅程 2024-07-18 01:32:42

最简单的方法是使用多视图或类似的东西在一个页面上完成整个事情。

除此之外,您可以使用 javascript 调用

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

来更改父页面上的 url。 您可以保持不变,或者将内容粘贴在查询字符串中,然后在 Page_Load 上使用这些值

Easiest way would be to do the whole thing on one page using a multiview or some such thing.

Other then that, with javascript you can call

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

to change the url on the parent page. You could just keep it the same, or stick stuff in the query string and muck with those values on Page_Load

何止钟意 2024-07-18 01:32:42

如果您在模式弹出窗口中打开子页面,则可以访问父页面上的 window.returnValue(通过 JavaScript),然后调用页面刷新或 Ajaxy 重新绑定调用。

检查此页面了解如何从模式弹出窗口返回值并根据父页面上的值执行某些操作。

但是,如果您可以选择,我将避免在单独的页面中打开编辑表单。 我将编辑表单放在用户控件中,并以灯箱样式显示/隐藏它。

If you're opening the child page in a modal pop-up, you can access window.returnValue on the parent page (via JavaScript) and then invoke a page refresh or an Ajaxy rebind call.

Check this page out for how to return value from modal pop-up and do something based on that value on parent page.

However, if you have the option, I'd get away from opening the edit form in a separate page. I'd put the edit form in a user control and show/hide it a la lightbox style.

叶落知秋 2024-07-18 01:32:42

不确定这是否正是您想要的,但您可以为此使用跨页面发布。 这允许您从子页面回发到父页面,并具有访问子页面的 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

    }
}

Not sure if this is exactly what you want but you could have used cross page posting for this. This allows you to post back to the parent page from the child page with the advantage of having access to the child page's ViewState. To do this you set the PostBackUrl property of a button to the child page. In the parent page you can then access the PreviousPage property to retrieve values from the child page. So in the child page have a button such as:

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

Then in the Parent.aspx Page_Load event:

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

    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文