我现在做一个页面组合的东西,也就是说一个页面不是被写出来的,而是可以将多个控件自由的连接起来实现动态组合一个页面的.那么现在的问题就是:我把页头,页尾,导航等等,以及实际内容的部分都写为一个一个的控件(.ascx),然后用动态的方法去拼接起来.这些我都没问题,做好了。但是问题是:因为一个页面最终只能有一个form runat=server,而且象button类的东西都必须放在这个里边的,那么我在控件里边当然不可以放这个标志,而如果我放在页头,而</form>就需要放在页尾的控件里,这样的导致的问题是在页头控件里找不到<form>的对应结束标记而出错,我怎么去排除这个错误呢?
我的思路是,先让这个页头控件不检查html语法错误,等它连接起来的时候自然会有配对的</form>标记的,这样就不会出错.但不知道这样行不行?如果行,请指点如何在控件中不检查HTML语法?

解决方案 »

  1.   

    TO westseason (西城时代):
    因为一个页面最终只能有一个form runat=server,而且象button类的东西都必须放在这个里边的,那么我在控件里边当然不可以放这个标志,而如果我放在页头,而</form>就需要放在页尾的控件里,这样的导致的问题是在页头控件里找不到<form>的对应结束标记而出错,我怎么去排除这个错误呢?没有必要这样做。页头和页尾都不放<form>标记,那么最终的动态生成的页面就会是类似这样:
    <html>
    <form runat="server">
    <table>
    <tr><td><页头控件></td></tr>
    .........
    <tr><td><页尾控件></td></tr>
    </table>
    <form>
    <html>
      

  2.   

    我在其中再放几个别的控件,比如UserControl1,UserControl2,他们里边含有一些象类似button等的控件,那么就会象这样.
    <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 的窗体标记内。
      

  3.   

    在你的主页面上放<form></form>,页头页尾都不要放<form></form>,如下的格式<html>
    <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>
      

  4.   

    是呀,为什么非要把<form></form>放在控件里呢~~~
      

  5.   

    把导入用户控件的语句放在
    <form runat="server">之后</form>之前就可以了
      

  6.   

    用用户控件,如楼上说的,把用户控件放在<form>里面就好了,不存在你说的这些问题啊.
      

  7.   

    如果访问一个asp.net程序,必须有一个.aspx文件。你的想法可能是根据条件组合出界面,那也至少需要一个.aspx文件装那些控件。
      

  8.   

    TO westseason(西城时代) :可能是我没有说清楚。比如你要生成的页面是index.aspx,那么在默认的情况下,页面的HTML代码已经是
    <%@ 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>所以,加入用户控件后才会是我开始说的那样。