【问题标题】:Grabbing a property from an aspx page to an ascx toolbar in VB将属性从 aspx 页面抓取到 VB 中的 ascx 工具栏
【发布时间】:2014-04-11 20:14:35
【问题描述】:

我有一个网页 (aspx) - 采购页面,带有 ascx 工具栏 - 导出工具栏,用于导出数据(.xls 或 .csv)。

我需要从采购页面中获取供应商的名称,并将该值插入到 ascx 工具栏上的导出文件的名称中。

在采购页面上有一个 ddl,用户可以在其中选择供应商和一个将显示所有数据的网格。网格上方是带有导出按钮的工具栏。我需要能够获取下拉列表的文本并在 ExportToolbar.ascx.vb 页面上使用它,这样我才能获取该文本并将其插入到名称中。

我尝试使用公共属性 get 和 set 方法,但它不起作用。我将如何从供应商 ddl 中获取选定的文本?

【问题讨论】:

  • 是否设置了 DDL 自动回发属性?

标签: asp.net vb.net toolbar ascx


【解决方案1】:

传统的想法是这样的:一个 ascx 可以托管在任何 aspx 页面上。因此,ascx 访问其主机页面的属性通常是一种不好的形式。 ascx 具有公共属性更合适,并且 aspx 会将值推送到 ascx 中(根据需要)。

但是,如果你真的想走这条路,.Page 属性(ascx 的)指的是主机页面。如果将其转换为主机的(更强)类型(名称),则可以访问主机属性。像这样:

'if your host page is called HostPage (and the class name is the same)
Dim host as HostPage = CType(me.Page, HostPage)
'now refer to the controls on the host (aspx) page
dim example as string
example = host.txtExample.Text

请记住,如果您的 ascx 托管在多个页面上,这将导致错误。

【讨论】:

  • 我最初尝试过,但不确定如何填充属性。- 代码 ----- 公共属性 SupplierSelection As String Get Return Convert.ToString(ViewState.Item("SupplierSelection")) End Get Set(ByVal value As String) ViewState.Add("SupplierSelection", value) End Set End Property '为了打印它 - Me.ASPxGridViewExporter1.WriteXlsToResponse(String.Format("{0}-{1}" , Me.SupplierSelection, Me.Supergrid.Description, _ dateprefix), True) 但是我将如何填充 SupplierName 属性?
【解决方案2】:

您可以为此目的使用事件形式。像这样在 UserControl 上定义事件:

Public BeforeExportEventArgs
     Inherits EventArgs

     Public Property FileName As String

End Class

Public Class ToolbarControl
    Inherits UserControl

    Public Event BeforeExport As EventHandler(Of BeforeExportEventArgs)

    Public Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
        ' Retrieve File Name
        Dim beforeExpEventArgs As New BeforeExportEventArgs()
        RaiseEvent BeforeExport(Me, beforeExpEventArgs)
        ' Set default filename if not provided by an event handler
        If String.IsNullOrEmpty(beforeExpEventArgs.FileName) Then
            beforeExpEventArgs.FileName = "DefaultFileName.csv"
        End If
        ' Export data
End Class

向承载 UserControl 的表单添加事件处理程序:

Public Class WebForm1
    Inherits Page

    ' ...

    Public Sub expToolbar_BeforeExport(sender As Object, e As BeforeExportEventArgs) Handles expToolbar.BeforeExport
        e.FileName = ddlSupplier.Text + ".csv"
    End Sub

    ' ...
End Class

这样,您可以避免 UserControl 和 Page 之间的紧密耦合。承载 UserControl 的页面可以设置特定的文件名,但不是必须的。

【讨论】:

    【解决方案3】:

    我最终做的是这个-

    在 ascx 页面上我创建了一个公共属性-

     Public Property SupplierSelection As String
             Get
                Return Convert.ToString(ViewState.Item("SupplierSelection"))
        End Get
        Set(ByVal value As String)
            ViewState.Add("SupplierSelection", value)
        End Set
    End Property
    

    然后在 aspx 页面上,我在加载网格事件中添加了这个-

    SupergridToolbar1.SupplierSelection = ddlStrategy.SelectedItem.Text.ToString()
    

    然后我可以使用 ascx 页面上的供应商选择。感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多