有关加载保存在数据库中的html页面的建议吗?
HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>xxx</title>
</head>
<body>
<form id="Form1" runat="server" method="post">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
</form>
</body>
代码隐藏:
protected override void OnInit(EventArgs e)
{
this.IniciarFormulario();
using (ServicoECMClient proxy = new ServicoECMClient())
{
tipoDocumento = proxy.ObterTipoDocumento(int.Parse(tipoDocumentoID));
}
if (tipoDocumento == null)
{
throw new ApplicationException();
}
this.Page.Header.InnerHtml = tipoDocumento.estilo; //css
this.Page.Form.InnerHtml = tipoDocumento.form; // form
base.OnInit(e);
}
我无法检索表单值。
查找
foreach (System.Web.UI.Control controle in this.Form1.Controls)
{
if (controle.GetType().Name == "HtmlInputText" || controle.GetType().Name == "HtmlInputSelect"
|| controle.GetType().Name == "HtmlInputRadio" || controle.GetType().Name == "HtmlInputTextCheckbox")
{
if (!string.IsNullOrEmpty(this.Request[controle.ClientID]))
{
documento_indice documentoIndice = new documento_indice();
documentoIndice.id_indice = int.Parse(controle.ClientID.Split('_')[1]);
documentoIndice.valor = this.Request[controle.ClientID];
documentoIndice.timestamp = DateTime.Now;
documentos_indices.Add(documentoIndice);
}
}
}
控件为空。 =&GT; this.Form1.Controls
有什么建议吗?
还有另一种更好的方法吗?
感谢。
答案 0 :(得分:2)
简短的回答是,是的,您可以使用此功能。我们以与此类似的方式提供所有客户特定的定制。
答案很长,它需要对您的应用程序和HTML进行一些重组。
我们发现实现此目的的最简单方法是通过UserControls。基本方法是:
1)创建作为UserControl存储在数据库中的页面内容,即
<%@ Control Language="vb" AutoEventWireup="false" %>
<input id="txtTest" type="text" runat="server" />
2)当你从数据库中提取它时,将它存储在带有ascx扩展名的磁盘上的文件中(现在就说content.ascx)。
3)修改主页面以添加在ascx将加载到的服务器上运行的div:
<div id="divContent" runat="server">
</div>
4)在页面init中,将控件加载到div中并初始化它:
Dim oControl As Control
' Load a user control
oControl = Me.LoadControl("content.ascx")
If oControl IsNot Nothing Then
' Ensure viewstate is enabled
oControl.EnableViewState = True
' Set properties as required
oControl.ID = "ContentControl"
' Clear the existing control(s) from the content container
Me.divContent.Controls.Clear()
' And add the new one
Me.divContent.Controls.Add(oControl)
End If
5)访问div控件中包含的控件集合。
请注意,在页面回发中,由于标准页面生命周期导致页面加载事件被触发,控件将不会加载内容。
我已经确认不需要代码隐藏,这完全可以正常工作。
答案 1 :(得分:1)
除非您手动将控件添加到控件集合(一项棘手的业务),否则您将需要以传统方式阅读表单值:
Request.Form["txtSomething"]
这意味着如果您知道他们的名字,您可以获取控件中包含的字符串值,但不是很多。