Пользовательские элементы управления C# Webforms в VB.NET

у меня есть существующий VB.NET веб-проект, который требует некоторых новых экранов (webforms). Из-за ряда причин эти новые экраны должны быть разработаны в C#. Прочитав вокруг, кажется, что это действительно возможно:добавление веб-формы C# в веб-приложение VB и добавить пользовательский элемент управления c# в существующий asp.net vb.net проект

однако я сделал небольшой тест:

  1. VB.NET решение, содержащее приложение VB WebForms проект
  2. добавлен новый C# ASP.NET проект к решению
  3. создан веб-пользовательский элемент управления в сборке C#
  4. ссылка и используемый веб-пользовательский элемент управления по умолчанию.aspx в 1.

проблема в том, что пользовательский элемент управления не отображается на странице. Что я пропустил? Это что-то, что невозможно в VB.NET приложение WebForms? Ниже приведен соответствующий код:

по умолчанию.аспн

<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" Inherits="waWithCUserControl._Default" %>
<%@ Register TagPrefix="uac" Namespace="waUserControls" Assembly="waUserControls" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <uac:UcTakeTest ID="myUserControl" runat="server" />
</asp:Content>

управление Пользователем в отдельной сборке waUserControls

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucTakeTest.ascx.cs" Inherits="waUserControls.UcTakeTest" %>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet">

    <div class="container">
        <div class="row">
            <div class="col-md-2">
                <div class="list-group">
                    <a href="#" class="list-group-item active">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                    <a href="#" class="list-group-item">Question</a>
                </div>
            </div>
         </div>
    </div>

1 ответов


вам нужно создать разметку (только файлы ASCX) из проекта C# в проект веб-приложения VB и ссылаться на эти ASCX вместо C#. Звучит странно, но поверь мне, это работает.

1-добавьте событие после сборки в проект C#, который копирует разметку UserControl (только .ASCX-файлы) в папку в проекте веб-приложения; например, в папку под корнем веб-приложения под названием "ExternalUserControls"

(обратите внимание, что они должны имеют то же свойство наследует, т. е. пространство имен и classname из проекта C#.)

2-Убедитесь, что проект c# ссылается (звучит так, как будто он уже есть)

3 - Добавить объявления управление на <pages> of <system.web> в интернете.config: -

  <system.web>
  .
  .
  <pages>
    <controls>
      <add tagPrefix="cc" 
           src="~/ExternalUserControls/MyControl.ascx" 
           tagName="MyControl"   />
      <add .... etc

4-ссылка на элементы управления на Вашей странице таким образом: -

<cc:MyControl id="testControl" runat="server" ..

5 - убедитесь, что вы Import правильное пространство имен для элемента управления, как определено в C# проект

6 - Обратите внимание, что иногда VS Page Designer откажется добавить переменную для вашего элемента управления, поэтому для доступа к вашему элементу управления в коде-позади вам нужно будет добавить уровень страницы protected (или любой эквивалент VB, я не могу вспомнить) переменная правильного типа, используя то же имя, что и в разметке страницы (testControl в примере выше)

Дайте мне знать, если вы хотите пример.