Проблема с использованием формы runat = server с мастер-страницами? - PullRequest
0 голосов
/ 23 сентября 2009

У меня есть главная страница с двумя ContentPlaceHolders.

У меня есть страница по умолчанию page.aspx, которая использует эту главную страницу.

На странице по умолчанию один ContentHolder имеет TreeView, а другой - GridView.

Теперь мне нужно отобразить их обоих вместе, и оба требуют <form runat="server">.

Но проблема в том, что у меня не может быть двух экземпляров <form runat="server"> на одной странице.

Я попытался поместить <form runat="server"> на главную страницу, но затем перестали работать функции TreeView и GridView .....

Пожалуйста, помогите мне, что я могу сделать, чтобы решить эту проблему.

Файл страницы:

<%@ 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>

Ответы [ 2 ]

5 голосов
/ 23 сентября 2009

Вы говорите, что функциональность TreeView и GridView "перестает работать", когда <form runat="server"> находится на главной странице - но если две формы (одна в главной, одна на странице, использующая главную) не работает , то технически это не работает в любом случае.

Правильная идиома для ASP.NET 2.0+ с использованием главных страниц - разместить тег формы на главной странице. Страницы, использующие мастер, если они правильно подключены, не будут нуждаться в тегах формы - они получат тег от своего мастера. Веб-приложение, которое я только что развернул сегодня утром, работало именно так. :)

Я предполагаю, что на самой странице скрыта проблема с кодом, из-за которой TreeView и GridView не функционируют после правильной реализации тегов формы.

EDIT

Для ясности, главная страница должна иметь <form runat="server">, все остальные необходимые элементы управления и HTML, заполнители и закрывающий тег </form>.

На страницах, использующих мастер, вообще не может быть никаких тегов <form runat="server">, особенно, если это не закрывающий тег </form>.

Сделано так, проблем быть не должно.

1 голос
/ 23 сентября 2009

Ваша главная страница должна содержать элемент формы с закрывающим элементом внизу.

<%@ 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>

Ваши контентные страницы не должны содержать никаких элементов формы для ваших целей.

...