从aspx页面抓取属性到VB中的ascx工具栏

时间:2014-04-11 20:14:36

标签: asp.net vb.net toolbar ascx

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

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

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

我试图使用公共属性get和set方法,但它无法正常工作。我如何从Supplier ddl中获取所选文本?

3 个答案:

答案 0 :(得分:1)

传统思维是这样的:ascx可以托管在任何aspx页面上。因此,通常ascx访问其主页的属性通常是不好的形式。 ascx更适合拥有公共属性,而aspx会将值推入ascx(根据需要)。

但是,如果你真的想要走这条路线,那么(。ascx的。)属性会引用主页。如果将其强制转换为主机的(更强)类型(名称),则可以转到hosts属性。像这样:

'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托管在多个页面上,这将导致错误。

答案 1 :(得分:0)

您可以使用此目的的事件表单。在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的页面可以设置特定的文件名,但不必。

答案 2 :(得分:0)

我最终做的是这个 -

在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页面上使用供应商选择。谢谢你的帮助!