2017-10-20 36 views
0

Le projet Fresh VS2017 Web Site a un Default.aspx défini de cette façon.Deux fichiers codebehind pour un aspx, un VB et un C#

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> 

J'ai fourni avec un fichier Default.aspx.vb comme ceci:

Partial Public Class _Default : Inherits Page 

    Public Function Teapot() As Boolean 

     Return True 

    End Function 

End Class 

et un fichier Default.aspx.cs comme ceci:

public partial class _Default : System.Web.UI.Page 
{ 
    protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); // There is a breakpoint on this line 

     Teapot();   // Error: The name 'Teapot' does not exist 
             in the current context 
    } 
} 

Le site web fonctionne, malgré l'erreur de temps de conception concernant l'utilisation de Teapot(), et le point d'arrêt est marqué comme The breakpoint will not currently be hit. C'est comme si le contenu du fichier C# n'était pas inclus dans le projet malgré l'utilisation d'une classe partielle et l'inclusion des éléments suivants dans le web.config:

<system.codedom> 
<compilers> 
    <compiler language="c#;cs;csharp" extension=".cs" 
    type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/> 
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" 
    type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/> 
</compilers></system.codedom> 

Comment puis-je obtenir le contenu des deux C# et VB fichiers inclus dans la classe de page _Default?

+2

Vous ne pouvez pas combiner les classes partielles C# et VB - elles utilisent des compilateurs différents. – Dai

+0

Je sais, mais depuis qu'ils se sont tous deux compilés à MSIL, j'ai pensé que peut-être ils pourraient être rejoints à ce stade. – davecove

+0

Ok, en utilisant les deux sous-dossiers de App_Code comme décrit dans l'article que Ujjwal a pointé dans la réponse acceptée, vous pouvez écrire une classe dans une langue qui peut être appelée depuis la classe _Default écrite dans l'autre langue (tous dans le même projet web). Pas la même chose qu'une classe partielle dans deux langues, mais assez proche. – davecove

Répondre

3

Vous ne pouvez pas mélanger vb et C# dans le même projet - si vous remarquez dans Visual Studio que les fichiers de projet sont .vbproj ou .csproj. Vous pouvez dans une solution - avoir 1 proj en vb et 1 en C#.

Ressemble selon ce que vous pouvez éventuellement les utiliser à la fois dans un projet web dans le répertoire App_Code:

http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx

Mais vous pouvez utiliser UserControl qui affichera vos données. Si vous utilisez CS par défaut, vous pouvez obtenir des données dans le backend à partir de votre code .VB et les afficher dans le contrôle utilisateur. Sinon, vous pouvez obtenir des données en utilisant Ajax et afficher ces données et événements en HTML. J'espère que vous pourrez ainsi afficher toutes les données et les événements des fichiers .vb et .cs.

+0

Ok, en utilisant les deux sous-dossiers de App_Code vous ne pouvez toujours pas diviser une classe partielle entre les langues, mais vous pouvez définir une classe d'aide dans une langue qui peut être appelée à partir de la classe _Default écrite dans l'autre langue. – davecove

+0

"Vous ne pouvez pas mélanger vb et C# dans le même projet - si vous remarquez dans Visual Studio que les fichiers du projet sont .vbproj ou .csproj." - cette règle ne s'applique pas aux "sites Web Visual Studio" (en particulier ceux qui utilisent l'ancien modèle de site Web ASP.NET 2.0 (2005-2008) avec le répertoire 'App_Code' qui est compilé au moment de l'exécution, pas au moment du design, ** signifie que vous pouvez mélanger C# et VB.NET dans le même projet. – Dai