【问题标题】:C# Webforms User controls in VB.NETVB.NET 中的 C# Webforms 用户控件
【发布时间】:2013-12-31 19:06:37
【问题描述】:

我有一个现有的 VB.NET Web 项目,它需要一些新的屏幕(网络表单)。由于多种原因,这些新屏幕将在 C# 中开发。阅读后看来这确实是可能的:Adding C# Web Form to VB Web Applicationadd c# user control to existing asp.net vb.net project

不过我做了一个小测试:

  1. 包含 VB WebForms 应用程序项目的 VB.NET 解决方案
  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>

【问题讨论】:

  • 这与 asp 网站有关,而我对 asp 应用程序(网络表单)感兴趣。虽然我意识到有可能在 App_Code 文件夹中有 CS 代码,但当涉及设计器文件和 ascx 文件时,这似乎不是一个解决方案。除非我错了?
  • 谁会提出这样的要求?
  • @R0MANARMY 客户端。

标签: c# asp.net vb.net webforms webusercontrol


【解决方案1】:

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

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

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

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

3 - 将控制声明添加到 web.config 中 &lt;system.web&gt;&lt;pages&gt;&lt;controls&gt; 部分:-

  <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 页面设计器会拒绝为您的控件添加变量,因此为了在代码隐藏中访问您的控件,您需要添加页面级 protected(或任何 VB等效的是,我不记得)正确类型的变量,使用与页面标记中相同的名称(上面示例中的 testControl)

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

【讨论】:

  • 先生,您是一位学者,一位绅士。那工作得很好。非常感谢。
  • 不客气。当有人(很久以前)告诉我这是解决方案时,您应该已经看到我脸上的表情了。但它有效!
  • 对于任何记分的人,同样的方法也适用于在 C# Web 表单中包含 VB.NET 控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
相关资源
最近更新 更多