2012-02-16 36 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