我现在做一个页面组合的东西,也就是说一个页面不是被写出来的,而是可以将多个控件自由的连接起来实现动态组合一个页面的.那么现在的问题就是:我把页头,页尾,导航等等,以及实际内容的部分都写为一个一个的控件(.ascx),然后用动态的方法去拼接起来.这些我都没问题,做好了。但是问题是:因为一个页面最终只能有一个form runat=server,而且象button类的东西都必须放在这个里边的,那么我在控件里边当然不可以放这个标志,而如果我放在页头,而</form>就需要放在页尾的控件里,这样的导致的问题是在页头控件里找不到<form>的对应结束标记而出错,我怎么去排除这个错误呢?
我的思路是,先让这个页头控件不检查html语法错误,等它连接起来的时候自然会有配对的</form>标记的,这样就不会出错.但不知道这样行不行?如果行,请指点如何在控件中不检查HTML语法?
我的思路是,先让这个页头控件不检查html语法错误,等它连接起来的时候自然会有配对的</form>标记的,这样就不会出错.但不知道这样行不行?如果行,请指点如何在控件中不检查HTML语法?
因为一个页面最终只能有一个form runat=server,而且象button类的东西都必须放在这个里边的,那么我在控件里边当然不可以放这个标志,而如果我放在页头,而</form>就需要放在页尾的控件里,这样的导致的问题是在页头控件里找不到<form>的对应结束标记而出错,我怎么去排除这个错误呢?没有必要这样做。页头和页尾都不放<form>标记,那么最终的动态生成的页面就会是类似这样:
<html>
<form runat="server">
<table>
<tr><td><页头控件></td></tr>
.........
<tr><td><页尾控件></td></tr>
</table>
<form>
<html>
<table>
<tr><td><页头控件></td></tr>
...
<tr><td><UserControl1....></td></tr>
<tr><td><UserControl2....></td></tr>
....
<tr><td><页尾控件></td></tr>
</table>
但是这样并不会有<form ruanat=server>这样的标记.
在执行编译时是可以通过的,但是无法运行,它会提示:类型“LinkButton”的控件“LinkButton1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“LinkButton”的控件“LinkButton1”必须放在具有 runat=server 的窗体标记内。
<form runat="server">
<table>
<tr><td><页头控件></td></tr>
...
<tr><td><UserControl1....></td></tr>
<tr><td><UserControl2....></td></tr>
....
<tr><td><页尾控件></td></tr>
</table></form>
<html>
<form runat="server">之后</form>之前就可以了
<%@ Page language="c#" Codebehind="index.aspx.cs" AutoEventWireup="false" Inherits="my.index" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>
<head>
<title>index</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server"> </form>
</body>
</html>所以,加入用户控件后才会是我开始说的那样。