1

私は、サーバーにファイルを送信してアップロードするために、分離コードで動的にボタンを動的に作成しようとしているプロジェクトに取り組んでいます。AddHandler を使用していますが、ボタンがポストバックしません。Webページの仕組みのために、ポストバックごとにこのボタンを再生成する必要があることをどこでも読みました。私はまだこのボタンを機能させることができません。HTMLを含むメインページがあります:

<%@ Page Language="vb"
    AutoEventWireup="false"
    MasterPageFile="~/Site.Master"
    CodeBehind="Departments.aspx.vb"
    Inherits="Homepage.Departments" %>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script type="text/javascript" src="~/Scripts/jquery-1.8.2.js"></script>
    <script src="~/Scripts/jquery-ui-1.8.24.custom.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    </script>
    <div id="Top" runat="server"> </div>
    <div id="Left" runat="server"></div>
    <div id="Right" runat="server"></div>
</asp:Content>

Top、Left、Right の div は、ページのコンテンツを動的に生成するための単なるプレースホルダーです。ページのコード ビハインドは、私が開発したクラスの関数を呼び出し、それをページの div の 1 つに追加するだけです (page_init で処理した場合、正しい順序でページを作成する必要があると聞きました.. .):

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

    *SNIP business logic to determine what information to pull*

    'NewWebPart is my class that creates the custom parts and returns them as an object

                For Each DeptLayoutRow As MyDataSet.DeptLayoutRow In DeptLayout
                    Dim NewPartObject As Object = NewWebPart.CreateNewPart

                    Select Case DeptLayoutRow.Area
                        Case 1
                            Top.Controls.Add(NewPartObject)
                        Case 2
                            Left.Controls.Add(NewPartObject)
                        Case 3
                            Right.Controls.Add(NewPartObject)
                    End Select

                    i += 1
                Next
            End If
        End If
    End If
End Sub

関数 CreateNewWebPart は、グリッドビュー、ボタン、および内部にいくつかの JavaScript コードを含むテーブルの形式でオブジェクトを返します。このクラスの重要な部分は、私が問題を抱えている部分を作成している関数です。この部分には、サーバー上のフォルダー内のアイテムを一覧表示するグリッドビューが含まれています。ユーザーが必要に応じて、グリッドビューの下にあるアップロード ボタンをクリックすると、JavaScript によってオーバーレイが作成され、必要なファイルをクリックしてサーバーにアップロードできます。送信ボタンは私が問題を抱えているものです:

Private Function CreateDocument() As Table
        Dim Documents As New GridView
        Documents.Width = width
        Documents.Height = height

        Dim table As New Table

        'Dim Files As String()
        Dim FileLocation As String = _
          ConfigurationManager.AppSettings.Item("DeptLoc").ToString + _
          "\" + DeptName + "\" + PartName

        If Directory.Exists(FileLocation) Then
            Dim DirInfo As New IO.DirectoryInfo(FileLocation)
            Dim FileArray As IO.FileInfo() = DirInfo.GetFiles()
            Dim FileInfo As IO.FileInfo

            Dim Dt As New DataTable
            Dt.Columns.Add("File Name", GetType(String))
            Dt.Columns.Add("File Link", GetType(String))
            Dt.Columns.Add("File Size", GetType(String))
            Dt.Columns.Add("Last Updated", GetType(Date))

            For Each FileInfo In FileArray
                Dt.Rows.Add(FileInfo.Name, _
                            FileInfo.FullName, _
                            Math.Round(FileInfo.Length / 1024).ToString, _
                            FileInfo.LastWriteTime)
            Next

            Documents.DataSource = Dt
            Documents.Attributes.Add("Class", "mGrid")
            Documents.ID = "Documents" + IDNum.ToString

            'This function creates and returns a table with Documents in the first cell
            table = CreatePartTable(Documents)

            'Create Upload file button'''''''''''''''''''''''''''''''''''''
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Dim btnUpload As New HtmlGenericControl
            btnUpload.InnerHtml = "<button id='btnUpload" + IDNum.ToString + "'>Upload File</button>"

            Dim UploadRow As New TableRow
            Dim UploadRowCell As New TableCell
            UploadRowCell.Controls.Add(btnUpload)
            UploadRow.Cells.Add(UploadRowCell)

            Dim UploadDiv As New HtmlGenericControl("DIV")

            UploadDiv.ID = "UploadDiv" + IDNum.ToString
            Dim lbl As New Label With {.Text = "Choose what files you would like to upload!"}
            Dim FileUpload As New HtmlInputFile With {.ID = "FileUpload" + IDNum.ToString}
            Dim btnSubmit As New Button With {.ID = "Submit" + IDNum.ToString, .Text = "Submit"}
            'Neither of these seem to work either....
            'btnSubmit.Attributes.Add("runat", "server")
            'btnSubmit.Attributes.Add("onclick", "btnUploadSubmit_OnClick")

            UploadDiv.Controls.Add(lbl)
            UploadDiv.Controls.Add(New LiteralControl("<br />"))
            UploadDiv.Controls.Add(New LiteralControl("<br />"))
            UploadDiv.Controls.Add(FileUpload)
            UploadDiv.Controls.Add(New LiteralControl("<br />"))
            UploadDiv.Controls.Add(New LiteralControl("<br />"))
            UploadDiv.Controls.Add(btnSubmit)
            AddHandler btnSubmit.Click, AddressOf btnUploadSubmit_OnClick

            Dim UploadDialogRow As New TableRow
            Dim UploadDialogRowCell As New TableCell
            UploadDialogRowCell.Controls.Add(UploadDiv)
            UploadDialogRow.Cells.Add(UploadDialogRowCell)

            Dim UploadDivJQuery As New UI.HtmlControls.HtmlGenericControl
            Dim JQueryString As New StringBuilder
            JQueryString.Append("<script type='text/javascript'>")
            JQueryString.Append("   $(function() {")

            JQueryString.Append("       $(""*[id$='UploadDiv" + IDNum.ToString + "']"").dialog({")
            JQueryString.Append("           autoOpen: false,")
            JQueryString.Append("           modal: true,")
            JQueryString.Append("           show: 'clip',")
            JQueryString.Append("           hide: 'clip'")
            JQueryString.Append("       }); ")
            JQueryString.Append("       $(""*[id$='btnUpload" + IDNum.ToString + "']"").click(function() {")
            JQueryString.Append("       $(""*[id$='UploadDiv" + IDNum.ToString + "']"").dialog( 'open' );")
            JQueryString.Append("            return false; ")
            JQueryString.Append("       }); ")
            JQueryString.Append("   });")
            JQueryString.Append("</script>")
            UploadDivJQuery.InnerHtml = JQueryString.ToString

            Dim UploadDivJQueryRow As New TableRow
            Dim UploadDivJQueryRowCell As New TableCell
            UploadDivJQueryRowCell.Controls.Add(UploadDivJQuery)
            UploadDivJQueryRow.Cells.Add(UploadDivJQueryRowCell)

            table.Rows.Add(UploadRow)
            table.Rows.Add(UploadDialogRow)
            table.Rows.Add(UploadDivJQueryRow)

            'To fix up the document's DataGrid the way we want it!
            'This addhanlder for the documents gridview works fine...
            AddHandler Documents.DataBound, AddressOf DocumentsDataGridHandler
            Documents.DataBind()

        End If
        Return Table
    End Function

投稿が多すぎて申し訳ありませんが、この問題に対する答えを何日も探していて、わからないようです。正しい順序でロードしていないためなのか、別のクラスにあるためなのか、マスターページなどを使用しているからなのかはわかりません。

4

0 に答える 0