【问题标题】:Changing the view (.aspx) from the code-behind (.aspx.cs) class从代码隐藏 (.aspx.cs) 类更改视图 (.aspx)
【发布时间】:2010-11-01 06:48:49
【问题描述】:

我有一个“经典”的 ASP.NET 应用程序 (.NET 3.5),它有一个非常标准的 runat="server" 样式表单,带有服务器端控件和一个“执行”asp:button。在代码隐藏中,executeButton_click 处理程序处理一些其他控件,运行报告,并将结果放入asp:label。所以按下 Execute 按钮的效果是整个页面重新加载,报表插入到标签中。

我需要对此进行更改,以便当按下执行按钮时,报表会在具有不同布局的新窗口中弹出(即没有控件和表单)。如果我在 MVC 框架中执行此操作,我只需更改“执行”操作中的视图模板,因此 ASP.NET 的模拟将是更改前面的代码,即从代码中使用的 .aspx 文件- 课后。

这可能吗?我知道 .aspx 和 .aspx.cs 之间的链接不是非常紧密,因为可以在多个 .aspx 文件中重用代码隐藏类。那么我可以将 .aspx 文件设置为从代码隐藏中呈现吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    通常你会通过使用将用户引导到新页面

    Response.Redirect("UrlToNewPage.aspx");
    

    但是,如果您需要访问原始表单上控件的属性,则可以采用另一种方法。将 asp:button 的“PostBackURL”属性更改为第二页。然后在第二个页面上,在 aspx 文件的顶部设置 (@Page PreviousPageType) 指令,这告诉该页面它打算作为 page1.aspx 中的帖子的目标。然后,在第二页后面的代码中,您可以使用 Page.PreviousPage 属性访问第一页上的控件

    出于代码共享的目的,如果您想要共享代码,您可以创建一个基类并让两个 aspx.cs 类都从该基类继承。

    【讨论】:

    • 表单中的控件也需要处理并用于生成报告。重定向会丢失这些值吗?
    • 您在进行重定向时会丢失表单上的所有值。有几种方法可以克服这个问题,1)在重定向之前将值存储在数据库中,然后在新页面上检索它们。 2) 将 asp:button 的“PostBackURL”属性更改为第二页。然后在第二个页面上,在 aspx 文件的顶部设置 (@Page PreviousPageType) 指令,这告诉该页面它打算作为 page1.aspx 中的帖子的目标。然后,在第二页后面的代码中,您可以使用 Page.PreviousPage 属性访问第一页上的控件。
    • 谢谢@eoldre。使用 PostBackURL,将 page1.aspx.cs 中的控件设置为 public 并在 page2 中使用 (page1)this.PreviousPage 效果很好。如果您可以更新您的答案,我会接受它;-)
    【解决方案2】:

    我认为这是不可能的,因为 ASP.NET 的工作方式。 ASP.NET 中的视图文件由 ASP.NET 引擎动态编译为代码隐藏类的子类。当请求 URL 时,子类就是实例化和执行的对象。从代码隐藏类更改视图正在尝试更改具体类型。我们可以有多个从单个代码隐藏类继承的 .aspx 文件,但反之则不行。

    非 ASP.NET 框架可以做到这一点,因为视图只是一个模板文件,在控制器操作完成后由框架动态处理,因此可以更改视图而无需担心继承问题.

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多