【问题标题】:app_code, modify element on aspx pageapp_code,修改aspx页面上的元素
【发布时间】:2011-08-23 10:31:25
【问题描述】:

希望这个结果足够清楚。

我是新手。

我有一个 asp.net 和 c# 项目,在 app_code 我有一个类 userInterface.cs,我需要做的是以下操作:

在那个类中我需要获取某个页面

NewPage.aspx

,并修改该页面上的一些 asp 元素。

目前我有这个:

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

不知道我还需要什么才能获取该页面。我想要的页面称为NewPage.aspx。

我将不胜感激。

即使是用谷歌搜索的东西也会很棒。我不知道从...开始。

【问题讨论】:

  • 您的项目是网站还是网络应用程序?

标签: c# asp.net httpcontext app-code


【解决方案1】:

您可以在 App_Code 类中创建方法,并从代码后面的任何事件中调用此方法。您可以将 GridView 或完整的 Page 传递给此方法。

这是位于代码隐藏文件中的 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
}

【讨论】:

    【解决方案2】:

    我认为您不能在您的网站中执行此操作,但您可以在您的 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();
    

    【讨论】:

    • 然后当我这样做时,我可以修改控件吗?我的控件是一个 gridView,在 app_code 类中添加列后,我需要在页面上使用新信息打印网格。
    • 所以你应该通过引用传递它
    • @ Miroprocessor - 我发现了一些同样的问题,它说要使用这个: Map map = (Map)LoadControl("~/Controls/map.ascx");我怎样才能让我的页面名称也成为一种类型?你有什么主意吗?因为这正是我需要的
    • link 在这里找到它
    • 你不能使用LoadControl来加载你的页面,因为你的页面不是继承自System.Web.UI.UserControl
    【解决方案3】:

    您也许可以通过 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");
        }
    }
    

    我必须重申,这可能不是一个好方法,原因有很多。不过,我确实希望有人回答您的实际问题,所以就是这样。

    【讨论】:

    • 谢谢,我正在寻找这个答案,这就是我需要做的。但是在我完成上述操作后,“gridView”为空,并且我在页面上拥有带有 id 的控件。知道为什么它不起作用吗?我将不胜感激。
    • 这是什么意思:'//取决于控件所在的位置,您可能需要使用递归' 我的控件位于我执行 'Page currentPage = 时找到的 aspx 页面上(Page)HttpContext.Current.Handler;'
    • this 'GridView gridView = currentPage.FindControl("GridView1");'返回空
    • @ovi:我的意思是它可能嵌套在另一个控件中,例如面板、占位符等。在此处搜索以递归查找页面上的控件;应该有很多例子。我已经发布了几个示例,因此您可以根据需要查看我的答案。
    【解决方案4】:

    如果您尝试从 App_Code 类访问 .aspx 页面,则说明您的代码有问题。你不应该这样做。 App_Code 中的类用于为您的 .aspx 页面提供服务,而不是反向。例如,在 App_Code 中,您保留实用程序类。

    【讨论】:

    • 你不能用这个“Page p = (Page)HttpContext.Current.Handler;”得到它,然后做一些这样的转换:NewPage p1 = (NewPage)p;?
    【解决方案5】:

    如果内容页 (.aspx) 绑定在 Master Page 下。您需要考虑在内容页面内定位控件的父控件。例如,如果母版页包含内容占位符,并且在该占位符内您正在绑定页面,则必须首先找到内容占位符。

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

    在编译响应请求时,ASP.Net 总是通过母版页文件(如果有的话)到达内容页。因此,在从类中请求任何 .aspx 文件下的页面控件时,必须首先在母版页中找到 Parent 控件。

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多