(Динамические элементы управления) На странице Pre_Init Я могу получить имя элемента управления с помощью следующего кода, но он не может найти элемент управления в панели, даже если он существует. Так почему же так? То, что мне нужно сделать, это получить значение контроля обратной связи до его удаления.Не удается найти элемент управления, хотя он существует Asp.Net
Примечание: это только образец.
Вот HTML-
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm2.aspx.vb" Inherits="DynamicControls_GetControlUnloaded.WebForm2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div style="width: 200px;">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
Вот код За
Public Class WebForm2
Inherits System.Web.UI.Page
Dim current_val As Object
Private Sub WebForm2_PreInit(sender As Object, e As System.EventArgs) Handles Me.PreInit
Dim postback_control As Control = GetPostBackControl(Me.Page)
If postback_control IsNot Nothing Then
Select Case postback_control.GetType
Case GetType(DropDownList)
current_val = CType(postback_control, DropDownList).Text
Case GetType(TextBox)
current_val = CType(postback_control, TextBox).Text
Case GetType(CheckBox)
current_val = CType(postback_control, CheckBox).Checked
Case GetType(RadioButton)
current_val = CType(postback_control, RadioButton).Checked
End Select
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Create Dynamic controls
Call BuildControls()
End Sub
Private Sub BuildControls()
For i As Integer = 0 To 2
Dim ddl As New DropDownList
ddl.Items.Add("Item 1")
ddl.Items.Add("Item 2")
ddl.Items.Add("Item 3")
ddl.Style.Add("margin", "3px")
ddl.ID = "Ctrl" & i.ToString
ddl.AutoPostBack = True
ddl.Width = 150
PlaceHolder1.Controls.Add(ddl)
Next
End Sub
Public Shared Function GetPostBackControl(ByVal thePage As Page) As Control
Dim myControl As Control = Nothing
Dim ctrlName As String = thePage.Request.Params.Get("__EVENTTARGET")
If ((ctrlName IsNot Nothing) And (ctrlName <> String.Empty)) Then
myControl = thePage.FindControl(ctrlName)
Else
For Each Item As String In thePage.Request.Form
Dim c As Control = thePage.FindControl(Item)
If (TypeOf (c) Is System.Web.UI.WebControls.Button) Then
myControl = c
End If
Next
End If
Return myControl
End Function
End Class
Почему вы делаете это таким образом, а не обычным способом? – ivowiblo
@ivowiblo Этот проект является динамичным. Я пытаюсь получить значение элемента управления (dropdownlist) до его воссоздания. – TroyS
О, я вижу, вы изменили весь пример, позвольте мне проверить сейчас :) – ivowiblo