Загрузка usercontrol в строку и отправка формы в течение - PullRequest
0 голосов
/ 16 февраля 2012

То, что я делаю, - это создание веб-сайта, на котором выполняется дизайн в виде HTML-файлов, которые затем считываются на главную страницу с помощью System.IO.StreamReader. и внутри html-шаблонов есть такие ключевые слова, как # USER.LOGIN # что я заменяю функциями и т. д.

Проблема в том, что я заменяю # USER.LOGIN # на usercontrol, где есть форма для входа. У меня есть функция, которая читает usercontrol в строку, и это работает. но поскольку usercontrol загружается в строку, события не следующие.

поэтому, когда я отправляю форму входа, ничего не происходит (страница сообщений), но не может получить ни одно из полей формы ...

Примечание: Я использую переписывание URL, поэтому URL http://www.domain.com/account/login где account - account.aspx, а login - режим, в котором находится учетная запись.

Код для замены ключевого слова в цикле чтения потоков (строка pr)

If InStr(line, "#USER.LOGIN#") Then
                    line = line.Replace("#USER.LOGIN#", vbCrLf & userfunc.GetMyUserControlHtml("uc", "account_login.ascx", "/account/login/") & vbCrLf)
                End If

И функции для чтения usercontrol

 Public Shared Function GetMyUserControlHtml(contextKey As String, controllerfile As String, Optional ByVal formaction As String = "")
    Dim myId As Guid = New Guid()
    Return userfunc.RenderUserControl("~\Controllers\" & controllerfile, "", myId, formaction)
End Function

Public Shared Function RenderUserControl2(path As String, Optional ByVal formaction As String = "") As String
    Using pageHolder As New Page(), _
        viewControl As UserControl = DirectCast(pageHolder.LoadControl(path), UserControl), _
        output As New StringWriter(), _
        tempForm As New HtmlForm()
        If formaction <> "" Then
            tempForm.Action = formaction
        Else
            tempForm.Action = HttpContext.Current.Request.RawUrl
        End If
        tempForm.Controls.Add(viewControl)
        pageHolder.Controls.Add(tempForm)
        HttpContext.Current.Server.Execute(pageHolder, output, False)
        Dim outputToReturn As String = output.ToString()
        Return outputToReturn
    End Using
End Function

Как бы ты это сделал? Мне нужно, чтобы userlogin был жестко запрограммирован в usercontrol, но все еще мог размещать его где угодно, используя ключевое слово template. Это также будет использоваться с другими функциями (подписка на новостную рассылку, чат и т. Д.)

1 Ответ

0 голосов
/ 16 февраля 2012

я бы посоветовал зарегистрировать ваш контроль в веб-конфигурации.

<add tagPrefix="CustomControl" tagName="LogIn" src="~/UserControls/Login.ascx"/>

вы все еще можете использовать "# USER.LOGIN #", но вместо замены на элемент управления ... замените егос чем-то вроде этого

<CustomControl:LogIn id="LogIn" runat="server"/>

это просто быстрая запись ... но вы всегда можете попробовать, если это сработает

, вы можете сохранить свой HTML, как это вместо размещения фактического "# USER.LOGIN # "

<% =GetLoginControl() %>

, а затем создайте в вашем коде публичную функцию с именем GetLoginControl() и верните response.write HTML-кода. Пометьте нужную вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...