Пользовательские элементы управления C# Webforms в VB.NET
у меня есть существующий VB.NET веб-проект, который требует некоторых новых экранов (webforms). Из-за ряда причин эти новые экраны должны быть разработаны в C#. Прочитав вокруг, кажется, что это действительно возможно:добавление веб-формы C# в веб-приложение VB и добавить пользовательский элемент управления c# в существующий asp.net vb.net проект
однако я сделал небольшой тест:
- VB.NET решение, содержащее приложение VB WebForms проект
- добавлен новый C# ASP.NET проект к решению
- создан веб-пользовательский элемент управления в сборке C#
- ссылка и используемый веб-пользовательский элемент управления по умолчанию.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 в примере выше)
Дайте мне знать, если вы хотите пример.