我有一个网页(aspx) - 采购页面,带有ascx工具栏 - 导出工具栏,用于导出数据(.xls或.csv)。
我需要从Purchasing页面获取供应商的名称,并将该值插入ascx工具栏上的导出文件的名称。
在“采购”页面上有一个ddl,用户可以在其中选择供应商和一个显示所有数据的网格。在网格上方有一个带有导出按钮的工具栏。我需要能够获取下拉列表的文本并在ExportToolbar.ascx.vb页面上使用它,这样我就可以将该文本插入到名称中。
我试图使用公共属性get和set方法,但它无法正常工作。我如何从Supplier ddl中获取所选文本?
答案 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页面上使用供应商选择。谢谢你的帮助!