2012-02-16 34 views
0

之內提交表單我在做的是創建一個網站,其中設計完成後,我使用System.IO.StreamReader將這些html文件讀入主頁面。 和HTML模板裏面有關鍵字像#USER.LOGIN# ,我用函數替換等將usercontrol加載到字符串並在

問題是,我正在替換#USER.LOGIN#用戶控件,有一個登錄窗體。 我有一個函數,它將usercontrol讀入一個字符串,它可以工作。 但由於usercontrol被加載到字符串alle事件沒有跟隨。

所以當我提交登錄表單,沒事,沒事happends(頁文章),但不能得到任何來自表單字段...

注: 我使用的URL重寫如此網址是http://www.domain.com/account/login 其中帳戶是account.aspx和登錄是模式的帳戶是英寸

代碼用於替換的關鍵字中的StreamReader環路(PR線)

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

而功能至r ead 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 

你會怎樣做呢? 我需要在usercontrol中對userlogin進行硬編碼,但仍然可以使用template關鍵字將其放置在任何位置。 這也將是與其他功能(簡報註冊,在線留言板等)

+0

你爲什麼要加載像這樣的用戶控件?您可以隨時將用戶控件動態添加到頁面中... – 2012-02-16 05:08:45

+0

我認爲他正在嘗試爲用戶創建CMS。在那裏他們可以動態地將登錄表單放入任何頁面。 – 2012-02-16 05:11:00

+0

@PhilipBadilla即使在這種情況下,他不能在頁面上動態添加用戶控件嗎? – 2012-02-16 05:18:37

回答

0

使用我的建議是你註冊的Web配置控制..

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

你仍然可以使用「#USER。 LOGIN#」但不是與控制取代它...... 有這樣的事情

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

這僅僅是一個快速的寫了取代它..但你總是可以嘗試,如果它的工作原理

您可以保存HTML這樣istead放置一個實際的「#USER.LOGIN#」

<% =GetLoginControl() %> 

,然後在代碼中創建一個名爲背後一個GetLoginControl()公共職能,並返回一個HTML的Response.Write標記你需要

+0

我確實在webconfig中調整了控件。 但我如何替換關鍵字與? 不能只是做一個正常的替換,那麼它只會被添加爲文本 – Crazykiddo 2012-02-16 05:32:25

+0

你可以使用一個頁面,您發送您的HTML標記了..並且它返回您的HTML與所有令牌替換了正確的控制..通過這些方式只是想法.. ive沒有嘗試過這些... – 2012-02-16 05:43:34

+0

但這是有點我在做什麼,其中關鍵字被替換爲一個函數,輸出usercontrol的HTML。它工作正常。 問題是,usercontrol內部的表單在提交時不會創建回發。所以不能從它獲得所有的輸入值... – Crazykiddo 2012-02-16 06:46:26