我正在做的是创建一个网站,其中设计完成html文件,然后使用System.IO.StreamReader读入母版页。 在html模板中有关键字,如#USER.LOGIN# 我用功能等替换。
问题是我正在替换#USER.LOGIN #with一个用户控件,其中有一个登录表单。 我有一个函数将usercontrol读入一个字符串,它的工作原理。 但由于usercontrol被加载到字符串alle,事件没有跟随。
因此,当我提交登录表单时,没有任何事情发生(页面发布),但无法从表单中获取任何字段...
注意: 我正在使用网址重写,因此网址为http://www.domain.com/account/login 其中account是account.aspx,login是帐户所在的模式。
替换streamreader循环中的关键字的代码(pr line)
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
你怎么会这样做? 我需要在usercontrol中对userlogin进行硬编码,但仍然可以使用template关键字将其放在任何位置。 这也将与其他功能(简报注册,shoutbox等)一起使用
答案 0 :(得分:0)
我建议的是在网络配置上注册你控制..
<add tagPrefix="CustomControl" tagName="LogIn" src="~/UserControls/Login.ascx"/>
您仍然可以使用“#USER.LOGIN#”,而不是用控件替换它... 用这样的东西替换它
<CustomControl:LogIn id="LogIn" runat="server"/>
这只是一个快速写的..但你总是可以尝试,如果它的工作
你可以保存你的HTML,而不是放置一个真正的“#USER.LOGIN#”
<% =GetLoginControl() %>
然后在名为GetLoginControl()
的代码中创建一个公共函数,并返回所需的HTML标记的response.write