2010-09-13 5 views
2

J'essaie de faire fonctionner ma page de maquette avec ma page de contenu, permettant à la page de contenu d'accéder aux commandes de la page maître. Je reçois l'erreur:ASP.net C# Masterpage problème

Parser Error Message: The 'mastertype' directive must have exactly one attribute: TypeName or VirtualPath

Ceci est sur les lignes:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="viewProduct.aspx.cs" Inherits="AlphaPackSite.viewProduct" 
    MasterPageFile="MasterPages/Main.master" 
    title="Hi there!" 
%> 
<%@ MasterType TypeName="Main" VirtualPath="MasterPages/Main.master" %> 

Ma page principale est:

namespace AlphaPackSite 
{ 
    public partial class Main : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

Je suis un peu confus avec namespaces et ce peut ainsi avoir se sont trompés, mais toutes les pages sont dans le même espace de noms maintenant je crois.

Mise à jour

Quand je retourne à:

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

Je continue à obtenir l'erreur:

Compiler Error Message: CS0030: Cannot convert type 'AlphaPackSite.Main' to 'ASP.masterpages_main_master' 

Source Error: 

Line 147:  public new ASP.masterpages_main_master Master { 
Line 148:   get { 
Line 149:    return ((ASP.masterpages_main_master)(base.Master)); 
Line 150:   } 
Line 151:  } 

Répondre

3

Sauf si vous souhaitez conserver une référence de votre page maître dans la page en cours (dans laquelle ce code est écrit), je vous suggère de supprimer la ligne <%@ MasterType VirtualPath="MasterPages/Main.master" %> .

Cette ligne permet d'accéder à la page maître de votre page (par exemple, lorsque vous devez modifier une étiquette sur la page maître ou que le menu doit ajouter quelques éléments supplémentaires, etc.). Si le contenu de votre page maître ne nécessite aucune modification/mise à jour depuis votre page de contenu, il n'est pas nécessaire d'utiliser la balise MasterType. Parce qu'en utilisant à la fois MasterPageFile="MasterPages/Main.master et MasterType, vous confondez le compilateur (même si la page maître est identique).

Mise à jour
Si vous devez garder la balise MasterType, puis retirez l'attribut MasterPageFile="MasterPages/Main.master de la directive de page.

+0

Cette réponse est fausse. Vous ne pouvez pas utiliser la directive MasterType sans l'attribut MasterPageFile, cela entraînera une erreur. La directive MasterType vous permet simplement de définir le type du maître utilisé, sinon il sera toujours par défaut à System.Web.UI.MasterPage et vous n'avez pas accès à vos membres et méthodes de classe héritées sans avoir lancé tous les appels. Voir http://stackoverflow.com/questions/8946742/why-we-use-master-type – needfulthing

0

Essayez:

<%@ MasterType TypeName="AlphaPackSite.Main" %> 
+0

Merci pour la réponse, même erreur que d'autres réponses, je l'ai écrit dans une mise à jour à la question –

2

Comme l'indique l'erreur, @MasterType attend un seul paramètre. Essayez simplement:

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

Voir http://msdn.microsoft.com/en-us/library/ms228274.aspx pour plus d'informations.

+0

Merci, j'avais essayé déjà et il jette une erreur différente: s –

+0

Quelle erreur génère-t-elle maintenant? –

+0

Je l'ai mis sous la rubrique «Mise à jour» dans la description de la question –

1

(1) commenter directive MasterType et compiler le site Web (2) décommenter la directive MasterType et placez-le avec soit le nom de type ou chemin virtuel, à la fois jetteront erreur

Raison de commentaires et décommentant: Logiquement, quand le site Web ne parvient pas à construire, il n'aura pas AlphaPackSite.Main créé et donc va lancer l'erreur mais une fois que vous le commentez, et qu'il n'y a pas d'autres erreurs dans le code, vous obtiendrez le type dans votre bac!

Donc, il y a plus de chances de travailler avec comment > compile > uncomment genre de choses
référence pour MasterType: http://msdn.microsoft.com/en-us/library/ms228274.aspx

-1

J'ai vu cette question lors de la recherche d'une autre réponse et pensé que je fournirais la réponse rapidement en cas d'autres personnes avoir ce problème.

Le problème est que vous ne souhaitez pas utiliser un chemin virtuel dans l'appel de nom principal. Au lieu de cela, vous devez utiliser TypeName et ajouter des caractères de soulignement pour votre chemin. Voici l'étiquette correcte en fonction de votre chemin:

<%@ MasterType TypeName="AlphaPackSite_Main" %>