【问题标题】:Problem using form runat=server with master pages?使用带有母版页的表单 runat=server 出现问题?
【发布时间】:2009-09-22 20:17:20
【问题描述】:

我有一个包含两个 ContentPlaceHolders 的母版页。

我有一个使用此母版页的默认 page.aspx。

在默认页面中,一个ContentHolder 有一个TreeView,另一个有一个GridView

现在我需要同时显示它们,并且都需要<form runat="server">

但问题是我不能在一个页面中有两个 <form runat="server"> 实例。

我尝试将<form runat="server"> 放在母版页上,但随后TreeViewGridView 功能停止工作.....

请帮助我解决这个问题。

页面文件:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="GridViewPg1.aspx.cs" Inherits="GridViewPg1" %>

<%@ Register assembly="obout_Grid_NET" namespace="Obout.Grid" tagprefix="cc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
   <form id="form1" runat="server">   
   <asp:Panel ID="Panel1" runat="server" ScrollBars="Vertical">

   <a style="color: #000000; font-weight: bold;">SumooHServer</a>
       <p>&nbsp;<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
           ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
           SelectCommand="SELECT DISTINCT [MachineGroupName], [MachineGroupID] FROM [MachineGroups]">
       </asp:SqlDataSource>
       <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
           ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
           SelectCommand="SELECT DISTINCT [PolicyID], [PolicyName] FROM [Policies]">
       </asp:SqlDataSource>
       <asp:TreeView ID="TreeView2" runat="server" 
           ontreenodepopulate="TreeView2_TreeNodePopulate">
           <Nodes>
               <asp:TreeNode NavigateUrl="~/GridViewPg1.aspx" PopulateOnDemand="True" 
                   Text="Machine Group" Value="Machine Group"></asp:TreeNode>
           </Nodes>
       </asp:TreeView>
       <asp:TreeView ID="TreeView3" runat="server" 
           ontreenodepopulate="TreeView3_TreeNodePopulate">
           <Nodes>
               <asp:TreeNode PopulateOnDemand="True" Text="Policies" Value="Policies">
               </asp:TreeNode>
           </Nodes>
       </asp:TreeView>
       </p></asp:Panel>
</form>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">

<asp:Panel ID="Panel2" runat="server" ScrollBars="None" Width="100%">
    <cc1:Grid ID="Grid1" runat="server" AllowFiltering="True" 
    AllowGrouping="True" DataSourceID="SqlDataSource3">
    </cc1:Grid>
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
    SelectCommand="SELECT * FROM [MachineGroups]"></asp:SqlDataSource>
</asp:Panel>

</asp:Content>

母版页文件:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SumooH</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>

  <div id="wrapper">
    <div id="header" 
          style="border-bottom-style: solid; border-bottom-color: #0000FF; border-bottom-width: medium">
    </div>

     <div id="left-content" 
          style="border-right: thin ridge #000000; top: 104px;">

          <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

        </asp:ContentPlaceHolder>
    </div>
    <div id="content-wrapper">
      <div id="content-inner">


        <asp:ContentPlaceHolder id="ContentPlaceHolder2" runat="server">

        </asp:ContentPlaceHolder>


      </div>
   <div id="footer">
        <p>&nbsp;</p> 
   </div>
     </div>


   </div>



</body>
</html>

【问题讨论】:

  • 请澄清您的问题;这是无法理解的
  • 问题是我无法让treeview和gridview一起显示时不起作用
  • 现在当我运行这个我给我一个错误说 gridview 需要表单 runat 服务器。如果我说它会给出一个错误,说不能有 2 个 runat 服务器。
  • 删除 Obout Grid 及其相关代码,看看会发生什么。我很好奇这是否真的是根本问题——也许它与母版页不兼容?
  • 如果我删除页面运行,treeview 也会运行...即使我放置一个普通网格,错误仍然存​​在

标签: c# asp.net webforms master-pages


【解决方案1】:

您说当&lt;form runat="server"&gt; 位于母版页中时,TreeView 和 GridView 功能“停止工作”——但如果执行两种表单(一个在母版中,一个在使用母版的页面中)不起作用,那么从技术上讲,这两种方式都行不通。

ASP.NET 2.0+ 使用母版页的正确习惯是在母版页中放置表单标记。使用母版的页面,如果连接正确,将不需要表单标签——它们将从母版获取标签。我今天早上刚刚部署的 Web 应用程序就是这样工作的。 :)

我猜实际上页面本身隐藏了一个代码问题,导致 TreeView 和 GridView 在表单标签正确实现后无法正常工作。

编辑

为了清楚起见,母版页必须具有 &lt;form runat="server"&gt;、所有其他所需的控件和 HTML、占位符以及结束 &lt;/form&gt; 标记。

使用master的页面根本不能有任何&lt;form runat="server"&gt;标签,尤其是没有&lt;/form&gt;标签。

这样做,应该没有问题。

【讨论】:

  • 我已经发布了 .aspx 页面,如果您愿意,我也可以发布母版页,如果这对您有帮助...谢谢
  • 我试过了,但正如我告诉你的那样,treeview 控件和 gridviewcontrol 功能停止工作......这就是为什么我不知道该怎么做......
  • 但只有gridview?树视图有效吗?如果是这种情况,我认为您在页面某处仍有&lt;/form&gt;。请编辑您的帖子以显示您要更改的代码,其中表单在 master 中,并且在 child 中没有表单标签......然后我们可以更有效地进行故障排除。
【解决方案2】:

您的母版页应包含表单元素,并在其底部包含结束元素。

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SumooH</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server" />
    </div>
    <div>
        <asp:ContentPlaceHolder id="ContentPlaceHolder2" runat="server" />
    </div>
</form>
</body>

您的内容页面不应包含任何用于您目的的表单元素。

【讨论】:

  • 我先做了同样的事情,但是当我这样做时,gridview 和 treeview 功能停止工作。为什么会发生这种情况...当我将表单放入母版页时,我从所有其他页面中删除了表单...
  • 我想你可能还有其他事情要做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2022-07-06
相关资源
最近更新 更多