C#Webforms VB.NET中的用户控件

The*_*dge 7 c# vb.net asp.net webforms webusercontrol

我有一个现有的VB.NET Web项目,需要一些新的屏幕(webforms).由于多种原因,这些新屏幕将在C#中开发.已经有一个读围绕看来这确实是可能的:增加C#Web窗体VB Web应用程序,并添加C#用户控件现有的asp.net vb.net项目

不过我做了一个小测试:

  1. 包含VB WebForms应用程序项目的VB.NET解决方案
  2. 在解决方案中添加了一个新的C#ASP.NET项目
  3. 在C#程序集中创建Web用户控件
  4. 在Default.aspx中引用和使用Web用户控件1.

问题是用户控件没有显示在页面上.我在这里错过了什么 这是VB.NET WebForms应用程序中无法实现的吗?以下是相关代码:

Default.aspx的

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

用户控制在单独的程序集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>
Run Code Online (Sandbox Code Playgroud)

sh1*_*rts 4

您需要将 C# 项目中的标记(仅限 ASCX 文件)后构建到 VB Web 应用程序项目中,并引用这些 ASCX 而不是 C# 的。听起来很奇怪,但相信我,它确实有效。

1 - 将构建后事件添加到 C# 项目,将 UserControl 标记(仅 .ASCX 文件)复制到 Web 应用程序项目中的文件夹;例如,Web 应用程序根目录下名为“ExternalUserControls”的文件夹

(请注意,它们应该具有相同的 Inherits 属性,即来自 C# 项目的命名空间和类名。)

2 - 确保引用了 C# 项目(听起来已经是了)

3 - 将控件声明添加到web.config 中的<controls>部分: -<pages><system.web>

  <system.web>
  .
  .
  <pages>
    <controls>
      <add tagPrefix="cc" 
           src="~/ExternalUserControls/MyControl.ascx" 
           tagName="MyControl"   />
      <add .... etc
Run Code Online (Sandbox Code Playgroud)

4 - 如此引用页面中的控件:-

<cc:MyControl id="testControl" runat="server" ..
Run Code Online (Sandbox Code Playgroud)

5 - 确保ImportC# 项目中定义的控件的命名空间正确

6 - 请注意,有时 VS 页面设计器会拒绝为您的控件添加变量,因此为了在代码隐藏中访问您的控件,您将需要添加页面级protected(或任何 VB 的等效项,我可以'记住)正确类型的变量,使用与页面标记中相同的名称(上例中的 testControl)

如果您想要一个例子,请告诉我。