Asp.net 将usercontrol加载到字符串并在中提交表单

Asp.net 将usercontrol加载到字符串并在中提交表单,asp.net,string,templates,user-controls,url-rewriting,Asp.net,String,Templates,User Controls,Url Rewriting,我正在做的是创建一个网站,在那里设计完成了html文件,然后使用System.IO.StreamReader将这些文件读入母版页。 html模板中有#USER.LOGIN之类的关键字# 我用函数等替换它 问题是我正在用一个usercontrol替换#USER.LOGIN#,其中有一个登录表单。 我有一个将usercontrol读入字符串的函数,它可以工作。 但是,由于usercontrol被加载到string alle,因此事件不在后面 因此,当我提交登录表单时,什么都没有发生(页面帖子),但无

我正在做的是创建一个网站,在那里设计完成了html文件,然后使用System.IO.StreamReader将这些文件读入母版页。 html模板中有#USER.LOGIN之类的关键字# 我用函数等替换它

问题是我正在用一个usercontrol替换#USER.LOGIN#,其中有一个登录表单。 我有一个将usercontrol读入字符串的函数,它可以工作。 但是,由于usercontrol被加载到string alle,因此事件不在后面

因此,当我提交登录表单时,什么都没有发生(页面帖子),但无法从表单中获取任何字段

注: 我正在使用url重写,因此url 其中account是account.aspx,login是帐户所处的模式

替换streamreader循环中关键字的代码(pr行)

以及读取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
公共共享函数GetMyUserControlHtml(contextKey为字符串,controllerfile为字符串,可选ByVal formaction为字符串=”“)
将myId设置为Guid=新Guid()
返回userfunc.RenderUserControl(“~\Controllers\”和controllerfile,”,myId,formaction)
端函数
公共共享函数RenderUserControl 2(路径为字符串,可选ByVal形式为字符串=”)为字符串
使用pageHolder作为新页面()_
viewControl作为UserControl=DirectCast(pageHolder.LoadControl(路径),UserControl)_
输出为新的StringWriter()_
tempForm作为新的HtmlForm()
如果形式为“”,则
动作=动作
其他的
tempForm.Action=HttpContext.Current.Request.RawUrl
如果结束
tempForm.Controls.Add(视图控件)
pageHolder.Controls.Add(临时表单)
HttpContext.Current.Server.Execute(pageHolder,output,False)
Dim outputToReturn As String=output.ToString()
返回输出返回
终端使用
端函数
你会怎么做? 我需要在usercontrol中硬编码userlogin,但仍然能够使用template关键字将其放置在任何位置。
这也将用于其他功能(时事通讯注册、shoutbox等)

我建议您在web配置上注册您的控件

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

您仍然可以使用“#USER.LOGIN#”,但不要将其替换为控件。。。 用类似这样的东西替换它

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

这只是一篇简短的评论。。但如果可行的话,你可以尝试一下

您可以像这样保存HTML,只需放置一个实际的“#USER.LOGIN#”



然后在代码隐藏中创建一个名为
GetLoginControl()
的公共函数,并返回一个响应。编写所需的HTML标记

为什么要这样加载用户控件?你总是可以在页面上动态添加用户控件……我想他是在尝试为用户创建CMS。他们可以动态地将登录表单放置到任何页面。@PhilipBadilla即使在这种情况下,他也不能在页面上动态添加用户控件吗?是的,这是一个cms。但问题不是放置usercontrol,问题是usercontrol中的表单在提交时不会触发回发。我确实在webconfig中注册了该控件。但是我如何用???替换关键字呢???不能只是做一个普通的替换,然后它将只是作为文本添加。你可以使用一个页面,在那里你发送你的HTML标记。。它返回你的HTML,并用正确的控件替换所有标记..顺便说一下,这些只是想法。。我没有尝试过这些…但这就是我正在做的,用一个从usercontrol输出html的函数替换关键字。而且效果很好。问题是usercontrol中的表单在提交时不会创建回发。因此,无法从中获取所有输入值…您如何调用函数GetMyUserControlHtml,您需要在每个页面加载时调用它,而不仅仅是第一个页面加载
<CustomControl:LogIn id="LogIn" runat="server"/>
<% =GetLoginControl() %>