2009-05-20 9 views
1

J'ai une page qui contient un menu de gauche. Ce menu de gauche est un fichier HTML [LeftFrame.htm] et est inclus dans la page aspx en utilisant le code suivant.Inclure le fichier HTML dans le code C#

<!-- #include file="LeftFrame.htm"--> 

Maintenant, j'ai besoin de changer le nom de fichier à LeftFrameOthers.htm du code C#.

Par exemple:

if (arg == 1) 
{ 
    divMenu.InnerHTML = "<!-- #include file="LeftFrame.htm"-->"; 
} 
else 
{ 
    divMenu.InnerHTML = "<!-- #include file="LeftFrameOthers.htm"-->"; 
} 

Mais il crée une erreur et le menu de gauche n'est pas chargé. Existe-t-il un moyen de gérer cela à partir du code C#.

Je ne veux pas utiliser deux divs à cet effet comme ..

<div id="divOwnLeftFrame" runat="server" style="DISPLAY: block"> 
      <!-- #include file="LeftFrame.htm"--></div><div id="divOthersLeftFrame" runat="server" style="DISPLAY: block"> 
      <!-- #include file="LeftProfileFrame.htm"--> 
</div> 

et changer la propriété d'affichage des divs à partir du code C#.

J'utilise VS 2003

Répondre

1

L'utilisation de fichiers include dans ASP.NET a généralement été remplacée par des contrôles utilisateur beaucoup plus puissants.Voici une autre alternative à l'utilisation d'inclure des fichiers:

ASPX:

<asp:Literal ID="FrameLiteral" runat="server" /> 

code derrière:

private string GetFrameContent(int arg) 
{ 
    string filename = (arg == 1) ? "LeftFrame.htm" : "LeftFrameOthers.htm"; 
    string path = Server.MapPath("./" + filename); 
    string content = System.IO.File.ReadAllText(path); 

    return content; 
} 

// Populate Literal 
FrameLiteral.Text = GetFrameContent(arg); 

pas aussi élégant que de le faire avec les commandes de l'utilisateur, mais il doit faire le travail et est relativement propre et net.

0

Un ASP.NET Literal Control semblerait idéal à cet effet. Le code serait pratiquement identique à ce que vous avez publié:

Markup

<div id="divOwnLeftFrame" runat="server" style="display: block;"> 
    <asp:Literal id="menuLiteral" runat="server" Mode="PassThrough" /> 
</div> 

code-behind (simplifié)

menuLiteral.Text = String.Format("<!-- #include file="LeftFrame{0}.htm"-->", 
    (arg == 1) ? "" : "Others"; 

Laissez-moi savoir si cela fait le travail.

+0

Mais il n'y a pas de peroperty InnerHTML pour le contrôle littéral. J'utilise visual studio 2003. – rahul

+0

@phoenix: Désolé, j'ai oublié de changer cela dans le code. Vous voulez la propriété Text - ne laissez pas le nom vous tromper, il est capable de rendre n'importe quel balisage. – Noldorin

+0

Literal n'a pas de balises wrapper, juste ce que vous y mettez. –

1

Vous pouvez créer un ensemble de contrôles utilisateur LeftFrame que vous pouvez remplacer dans le codebehind. De cette façon, vous pouvez choisir dynamiquement quel contrôle charger lors de l'exécution.

Par exemple. . .

ILeftFrame {} 

LeftFrame : ILeftFrame {} 
LeftFrameOthers : ILeftFrame {} 

Ensuite, le contrôle se

LeftFrameControl : System.Web.Ui.UserControl {} 

Ensuite, dans votre page, vous avez un

<myns:LeftFrameControl runat="Server">. 

Ce contrôle aurait une propriété qui vous permet de spécifier ILeftFrame que vous utilisez , le chargerait, exécuterait les comportements appropriés, et tout irait bien dans le monde de l'orientation objet.

1

Une certaine façon ce sale autour de cela pourrait être de faire quelque chose comme ceci:

<div id="ALeftMenu"> 
<% 

if (arg == 1) 
{ 
    %> 
    <!-- #include file="LeftFrame.htm"-->"; 
    <% 
} 
else 
{ 
    %> 
    <!-- #include file="LeftFrameOthers.htm"--> 
    <% 
} 

%> 
</div> 

Pas parfait mais rapide, simple et ferait l'affaire.

0

Une autre alternative pourrait être ...

Html:

<div style="DISPLAY: block"> 
    <asp:placeholder id=="phContent1" runat="server" visible="false"> 
     <!-- #include file="LeftFrame.htm"--> 
    </asp:placeholder> 
    <asp:placeholder id=="phContent2" runat="server" visible="false"> 
     <!-- #include file="LeftFrameOthers.htm"--> 
    </asp:placeholder> 
</div> 

Votre code C#:

if (arg == 1) 
{ 
    phContent1.Visible = true; 
} 
else 
{ 
    phContent2.Visible = true; 
} 
Questions connexes