在VB.NET中使用C# Webforms用户控件

7
我有一个VB.NET Web项目,需要添加一些新的屏幕(网页表单)。由于多种原因,这些新屏幕需要用C#来开发。经过一番调查,我发现这是可能实现的:在VB Web应用程序中添加C# Web Form向现有ASP.NET VB.NET项目中添加C#用户控件
然而,我进行了一个小测试:
1. VB.NET解决方案包含一个VB WebForms应用程序项目 2. 添加了一个新的C# ASP.NET项目到该解决方案中 3. 创建了一个C#程序集中的Web用户控件 4. 在1中的Default.aspx中引用和使用了Web用户控件
问题是这个用户控件没有在页面上显示。我错过了什么?这在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>

在独立程序集中使用用户控件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>

有很多关于这个问题的讨论... https://dev59.com/CEvSa4cB1Zd3GeqPbQwD - Anand Thangappan
这与一个asp网站相关,而我对asp应用程序(webforms)感兴趣。虽然我意识到在App_Code文件夹中有CS代码是可能的,但当涉及到设计师文件和ascx文件时,这似乎并不是一个解决方案。除非我对此有误? - TheEdge
谁会提出这样的要求? - Roman
@R0MANARMY 客户端。 - TheEdge
1个回答

4
你需要在VB Web应用程序项目中,将C#项目的标记生成(仅限ASCX文件)进行后期构建,并引用那些ASCX文件,而不是C#的那些。听起来很奇怪,但请相信我,它有效。
1- 将后期构建事件添加到C#项目中,将UserControl标记(仅.ASCX文件)复制到Web应用程序项目中的一个文件夹中;例如,在您的Web应用程序根目录下名为“ExternalUserControls”的文件夹中。
(请注意,它们应具有相同的Inherits属性,即从C#项目中获取的名称空间和类名。)
2- 确保已引用C#项目(听起来似乎已经引用了)
3- 在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 - 确保按照C#项目中定义的正确命名空间Import控件。

6 - 请注意,有时候VS页面设计器会拒绝为您的控件添加变量,因此,为了在代码后台访问您的控件,您需要添加一个与页面标记中相同名称(例如上面的testControl)的页面级protected(或VB等价项)变量,并使用正确的类型。

如果需要示例,请告诉我。


您是一位学者和绅士先生。那个完美地运作了。非常感谢。 - TheEdge
不客气。很久以前有人告诉我这是解决方案时,我的脸上表情一定很好笑。但它确实有效! - sh1rts
1
对于任何关注的人,这种方法同样适用于在C# Web表单中包含VB.NET控件。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接