首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VB中将属性从aspx页面抓取到ascx工具栏

在VB中将属性从aspx页面抓取到ascx工具栏
EN

Stack Overflow用户
提问于 2014-04-11 20:14:35
回答 3查看 740关注 0票数 0

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

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-22 14:19:31

我最后做的是-

在ascx页面上我创建了一个公共财产-

代码语言:javascript
复制
 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页面上我把它添加到了加载网格事件中-

代码语言:javascript
复制
SupergridToolbar1.SupplierSelection = ddlStrategy.SelectedItem.Text.ToString()

然后,我能够使用ascx页面上的供应商选择。谢谢你的帮助!

票数 0
EN

Stack Overflow用户

发布于 2014-04-11 20:42:23

传统的想法是这样的: ascx可以托管在任何aspx页面上。因此,通常ascx访问其主机页的属性是不好的形式。对于ascx来说,拥有一个公共属性要合适得多,并且aspx会将值推入ascx (视需要而定)。

但是,如果您确实想要走这个路线,那么(ascx的.Page属性)将引用到主机页。如果将其转换为主机的(更强)类型(名称),则可以获得主机属性。如下所示:

代码语言:javascript
复制
'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
EN

Stack Overflow用户

发布于 2014-04-11 20:39:58

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

代码语言:javascript
复制
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的窗体:

代码语言:javascript
复制
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和页面之间的紧密耦合。承载UserControl的页面可以设置特定的文件名,但不必设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23021806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档