0

次の問題に 5 時間以上取り組んでいます。

Private Sub ModulEdit_PreInit(sender As Object, e As EventArgs) Handles Me.PreInit

    Dim modulid As Integer = 1

    loadeditors(modulid)



End Sub


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Public Sub loadeditors(modulID As Integer)



    PlaceHolder1.Controls.Clear()

    Using dbContext As New EntitiesModel()
        Dim mps As List(Of ef.Modulparameter) = dbContext.Modulparameters.Where(Function(c) c.ModulID = modulID).ToList

        Dim mmid As Int16
        If EditMode.Checked = True Then
            mmid = RadComboBox3.SelectedValue
        End If

        Dim mp As ef.Modulparameter

        For Each mp In mps


            Dim lbl As New Label
            lbl.Text = "<BR>" & mp.Name & "<BR>"
            PlaceHolder1.Controls.Add(lbl)

            Select Case mp.Editor.Name

                Case "textbox1line"

                    Dim con As New TextBox
                    con.ID = mp.ID

                    If EditMode.Checked = True Then
                        Using dbContext2 As New EntitiesModel
                            Try
                                Dim mpa As ef.Menu_modul_paramvalue = dbContext2.Menu_modul_paramvalues.Where(Function(c) c.ModulparameterID = mp.ID And c.Menu_modulID = mmid).First
                                con.Text = mpa.Valuestring

                            Catch ex As Exception
                                con.Text = "AAAA"
                            End Try

                        End Using
                    End If



                    PlaceHolder1.Controls.Add(con)
                    'RadAjaxManagerProxy1.AjaxSettings.AddAjaxSetting(Panel1, con, Nothing)
                    'RadAjaxManagerProxy1.AjaxSettings.AddAjaxSetting(con, con, Nothing)


                Case "radeditor"

                    Dim con As New RadEditor
                    con.ID = mp.ID
                    con.ToolsFile = "\admin\controls\ToolsFile.xml"
                    'con.CssFiles.Add("\Content\frenzy\css\frenzy-orange.css")
                    If EditMode.Checked = True Then
                        Using dbContext2 As New EntitiesModel
                            Try
                                Dim mpa As ef.Menu_modul_paramvalue = dbContext2.Menu_modul_paramvalues.Where(Function(c) c.ModulparameterID = mp.ID And c.Menu_modulID = mmid).First
                                con.Content = mpa.Valuestring

                            Catch ex As Exception
                                con.Content = "BBBB"
                            End Try

                        End Using
                    End If


                    PlaceHolder1.Controls.Add(con)
                    'RadAjaxManagerProxy1.AjaxSettings.AddAjaxSetting(Panel1, con, Nothing)
                    'RadAjaxManagerProxy1.AjaxSettings.AddAjaxSetting(con, con, Nothing)



            End Select




        Next

    End Using


End Sub

コントロールを動的に追加し、pre_init で上記のコードパーツを呼び出します (load と init でも同じ結果を試しました) コントロールの値 (テキスト) は、その行 PlaceHolder1.Controls.Add(con) までそこにあります con.text の後空の。

コントロールは後に追加されますが、値はありません。奇妙なことに、同じプロセスで、テキスト値が後のページにある別のコントロール (ラベル) を追加します。

追加情報を追加: LoadEditors をデバッグするときのコントロール値 (テキストまたはコンテンツ) は、常に正しく設定されます。しかし、ページでは両方 (テキストボックスと reditor) が空です。関連する多くの投稿で説明されているように、ルーティングは pre init から呼び出されます。

4

2 に答える 2

1

ModulEdit_Init でロードディターを呼び出しています。これは LoadControls ではないでしょうか?

于 2012-12-19T16:54:58.253 に答える
0

私はそれを自分で修正しました:

  • コントロールをプレースホルダーに追加する前に「con.ViewStateMode = System.Web.UI.ViewStateMode.Disabled」を追加する
  • RadComboBox3 でも「loadeditors()」を呼び出す

おそらく問題は、page-load または init でエディターをロードしたことで、正しい値が得られましたが、RadComboBox3.SelectedIndexChanged イベントが呼び出され、何らかの方法で値が上書きされました。

だから私の答えは本当の答えではありませんが、今はうまくいきます(私はそれが嫌いです:うまくいきますが、理由はわかりません);)

于 2012-12-20T11:16:44.410 に答える