2010-01-13 18 views
36

Niedawno przekonwertowałem projekt strony internetowej na projekt aplikacji internetowej w Visual Studio 2008. W końcu mam to skompilować, a pierwsza strona (ekran logowania) wyświetlane jako normalne, ale wtedy, gdy przekierowany do strony Default.aspx, otrzymałem błąd:Błąd analizatora składni: "_Domyślnie" nie jest tutaj dozwolone, ponieważ nie rozszerza klasy "System.Web.UI.Page" i deklaracja MasterType

Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'. 

Wszystkie moje strony dziedziczą z klasy o nazwie "BasePage", która rozszerza System.Web.UI.Page. Oczywiście problem nie dotyczy tej klasy, ponieważ strona login.aspx wyświetla się bezbłędnie, a także dziedziczy po tej stronie głównej.

Wszystkie strony w witrynie, w tym strona logowania, należą do dzieci strony wzorcowej.

Po kilku testach ustaliłem, co powoduje błąd (choć nie wiem DLACZEGO to robi).

Na wszystkich stronach, na których mam następującą etykietę, błąd NIE występuje.

<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %> 

Na wszystkich stronach, które nie zawierają tej linii, wystąpi błąd. Dotyczy to całej aplikacji. Mam tag tylko na stronach, na których było zapotrzebowanie na elementy sterujące na stronie MasterPage.

Więc pomyślałem, że po prostu dodaję tę linię do wszystkich moich stron i skończę z tym. Ale kiedy dodaję tę linię, pojawia się błąd kompilacji: "Obiekt" nie zawiera definicji "Master"

Ten błąd pochodzi z pliku designer.cs powiązanego ze stroną ASPX, którą dodałem Deklaracja "MasterType" dla.

Wymuszałem przebudowę pliku projektanta, ale to niczego nie zmienia. Porównałem zawartość odwołania głównego w plikach projektanta między login.aspx (working) i default.aspx (nie działa), ale są one dokładnie takie same.

Ponieważ bardzo chciałbym, aby działało bez dodawania deklaracji "MasterType" do każdej strony, a ponieważ "poprawka" i tak nie działa, czy ktoś wie dlaczego nie ma deklaracji "MasterType" w pliku aspx powoduje błąd parsera? Czy jest na to poprawka?

Przykład Kod:

Oto kod dla Login.aspx i login.aspx.cs który działa bezbłędnie:

Login.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MainMaster.master" AutoEventWireup="true" Inherits="SOME.NAMESPACE.MyApplicationName.WebApplication.Login" Codebehind="Login.aspx.cs" %> 
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server"> 
    <table> 
    <tr> 
     <td> 
      <asp:UpdatePanel ID="upLogin" runat="server"> 
       <ContentTemplate> 
        <asp:Panel ID="Panel1" runat="server" DefaultButton="Login1$LoginButton"> 
         <asp:Login ID="Login1" runat="server" LoginButtonStyle-CssClass="button" 
         TextBoxStyle-CssClass="textBoxRequired" 
         TitleTextStyle-CssClass="loginTitle" > 
         </asp:Login> 
        </asp:Panel> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      <asp:UpdatePanel ID="upPasswordRecovery" runat="server"> 
       <ContentTemplate> 
       <asp:PasswordRecovery ID="PasswordRecovery1" runat="server" 
       SubmitButtonStyle-CssClass="button" TitleTextStyle-CssClass="loginTitle" 
       SuccessText="Your new password has been sent to you." 
       UserNameInstructionText="Enter your User name to reset your password." /> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </td> 
    </tr> 
    </table> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="SideBarPlaceHolder" Runat="Server"> 
    <h2>Login</h2> 
    <asp:Button ID="btnCreateAccount" runat="server" Text="Create Account" OnClick="btnCreateAccount_Click" CausesValidation="false" /> 
</asp:Content> 

Login.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using SOME.NAMESPACE.MyApplicationName.WebApplication; 
using SOME.NAMESPACE.MyApplicationName.Bll; 

namespace SOME.NAMESPACE.MyApplicationName.WebApplication 
{ 
    public partial class Login : BasePage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      Login1.Focus(); 
     } 
     protected void btnCreateAccount_Click(object sender, EventArgs e) 
     { 
      Page.Response.Redirect("~/CreateUser/default.aspx"); 
     } 
    } 
} 

Oto kod dla default.aspx i default.aspx.cs, który rzuca błąd parsera gdy w przeglądarce internetowej:

default.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MainMaster.master" AutoEventWireup="True" Inherits="SOME.NAMESPACE.MyApplicationName.WebApplication._Default" Codebehind="Default.aspx.cs" %> 
<%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %> 
<asp:Content ID="MainContent" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server"> 
<div class="post"> 
    <h2 class="title">Announcements</h2> 
    <p class="meta">Posted by Amanda Myer on December 15, 2009 at 10:55 AM</p> 
    <div class="entry"> 
     <p>The MyApplicationName CMDB will be down for maintenance from 5:30 PM until 6:30 PM on Wednesday, December 15, 2009.</p> 
    </div> 
    <p class="meta">Posted by Amanda Myer on December 01, 2009 at 1:23 PM</p> 
    <div class="entry"> 
     <p>The MyApplicationName CMDB is officially live and ready for use!</p> 
    </div> 
</div> 
</asp:Content> 
<asp:Content ID="SideBarContent" ContentPlaceHolderID="SideBarPlaceHolder" Runat="Server"> 
    <img src="images/MyApplicationName.jpg" alt="MyApplicationName Gremlin" width="250"/> 
</asp:Content> 

Default.aspx.cs

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using SOME.NAMESPACE.MyApplicationName.Bll; 
using SOME.NAMESPACE.MyApplicationName.WebApplication; 

public partial class _Default : BasePage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

Dzięki!

Odpowiedz

49

Wymyśliłem to. Problem polegał na tym, że w projekcie wciąż istniały pewne strony, które nie zostały przekształcone w "obszary nazw" w razie potrzeby w projekcie aplikacji internetowej. Sądzę, że pomyślałem, że nie skompilowałoby się, gdyby nadal istniała jakakolwiek z tych stron, ale jeśli strona nie odwoływała się do niczego z zewnątrz, to nie wydawało się to skandować. Kiedy więc powiedział, że nie odziedziczył po "System.Web.UI.Page", to dlatego, że nie mógł znaleźć klasy "BasePage" w czasie wykonywania, ponieważ sama strona nie znajdowała się w obszarze nazw WebApplication. Przeszukałem wszystkie moje strony jeden po drugim i upewniłem się, że zostały one poprawnie dodane do przestrzeni nazw aplikacji WebApplication, a teraz nie tylko kompilują bez problemu, ale wyświetlają się również normalnie. tak!

co to może być wersja próbna konwertująca ze strony internetowej na projekt aplikacji internetowej!

4

Spójrz na to:

dowolnej strony w projekcie, który ma brakujący lub innej przestrzeni nazw ...

Jeśli masz dowolnej strony projektu z <NO Namespace> lub

INNE Przestrzenie nazw niż Default.aspx, dostaniesz ten

"Nie można załadować Default.aspx", lub to: "Default.aspx tutaj nie pasuje".

TAKŻE: Jeśli masz przekierowanie do strony w swojej Rozwiązanie/projekt i strona który ma zostać przekierowany ma złą nazw - możesz nie dostać błąd kompilatora, dopóki nie spróbujesz i run. Jeśli przekierowanie zostanie usunięte lub skomentowane, błąd zniknie ...

BTW - Co do diabła robią te komunikaty o błędach? Czy to MS.Access, z "misdirection" - ??

DGK

1

Miałem podobny błąd, ale nie z konwersji ...

System.Web.HttpException: „Namespace.Website.MasterUserPages” jest niedozwolone, bo to nie rozszerza klasę " System.Web.UI.MasterPage '

Rozszerzyłem także klasę MasterPage.

Błąd spowodowany był prosty błąd kompilacji w mojej strony wzorcowej samego:

System.Web.HttpCompileException: c: \ katalog \ ścieżka \ WWW \ MasterUserPages.Master (30): error CS1061: „ASP .masteruserpages_master "nie zawiera definicji" btnHelp_Click "i nie można znaleźć metody rozszerzenia" btnHelp_Click ", akceptując pierwszy argument typu" ASP.masteruserpages_master "(czy brakuje instrukcji użycia lub odniesienia do zespołu?)

Nie widziałem błędu, dopóki nie przeniosłem MasterPage do folderu głównego witryny. Kiedy już się tym zająłem, udało mi się umieścić moją stronę MasterPage w folderze, który chciałem.

0

Mój problem był prosty: strona główna i klasa Master.Designer.cs miały poprawny obszar nazw, ale klasa Master.cs miała niepoprawny obszar nazw.

11

Miałem ten problem, ponieważ skopiowałem (dość ogólną) stronę z jednej z moich aplikacji ASP.Net do nowej aplikacji.

Zmieniono odpowiednie komendy przestrzeni nazw, aby odzwierciedlić nową lokalizację pliku ... ale ... Zapomniałem zmienić parametr dziedziczy po na samej stronie aspx.

<%@ Page MasterPageFile="" StylesheetTheme="" Language="C#" 
    AutoEventWireup="true" CodeBehind="MikesReports.aspx.cs" 
    Inherits="MikesCompany.MikesProject.MikesReports" %> 

Po zmianie parametru Inherits błąd zniknął.

0

Zawsze można refrakcji obszaru nazw i będzie aktualizować wszystkie strony w tym samym czasie. Podświetl obszar nazw, kliknij prawym przyciskiem i wybierz refraktor z menu rozwijanego.

0

I usunąć tę stronę internetową, którą chcę połączyć ze stroną wzorcową z aplikacji internetowej, dodać nową stronę w projekcie, a następnie ustawić stronę wzorcową (Początkowo skopiowałem stronę z witryny internetowej do aplikacji sieci Web, radząc sobie ze stroną aspx (Przekształcałem stronę internetową w aplikację internetową jako projekt))

0

Skopiowałem i zmieniłem nazwę strony (aspx/cs). Nazwa strony była „mainpage”, więc nazwa klasy na początku pliku cs następująco:

enter image description here

Po zmianie nazwy klasy pasujące ten błąd został rozwiązany.

0

Dla mnie miałem wszystkie przestrzenie nazw na stronach i żadne z powyższych rozwiązań nie naprawiło tego. Mój problem był w:

<%@ Page Language="C#" 
AutoEventWireup="true" 
CodeBehind="xxx.aspx.cs" 
Inherits="xxx.xxx.xxx" 
MasterPageFile="~masterurl/default.master" %> 

Wtedy w moim pliku aspx.cs przestrzeń nazw nie pasuje tag Inherits. Dlatego potrzebne

namespace xxx.xxx.xxx 

W .cs dopasować Inherits.

0

Pamiętaj .. dziedziczy jest wielkość liter dla C# (nie tak do VB.NET)

Stwierdzili, że się na własnej skórze.

Powiązane problemy