私は、サーバーにファイルを送信してアップロードするために、分離コードで動的にボタンを動的に作成しようとしているプロジェクトに取り組んでいます。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
投稿が多すぎて申し訳ありませんが、この問題に対する答えを何日も探していて、わからないようです。正しい順序でロードしていないためなのか、別のクラスにあるためなのか、マスターページなどを使用しているからなのかはわかりません。