在 Visual Studio 中自动创建处理程序签名

2023-12-19

在 c#、asp.net 4.0、VS2015 中工作,我创建了一个用户控件,它只是一个下拉列表,其中包含用户可以传递给它的几个其他属性,以及一个事件和委托。当下拉列表更改时,会触发 OnSelectedIndexChanged,然后检查事件是否已填充并调用委托。

定义如下:

public partial class SiteList : System.Web.UI.UserControl
{
    public event SiteIDChangedHandler SiteIDChanged;
    public delegate void SiteIDChangedHandler(object sender, EventArgs e);
}

我遇到的问题是,当使用该用户控件并附加事件时,在 .aspx 页面中工作时,不会在 Visual Studio 中创建委托的定义。例如,当我输入以下内容时

<CW:SiteList runat="server" ID="SiteList" OnSiteIDChanged=""

然后点击 OnSiteIDChanged 的​​ = 号,然后它会显示“创建新事件”作为 OnSiteIDChanged 的​​选项,就像我在 .net 中使用的任何其他事件一样。当我选择“CreateNewEvent”时,后面的代码中创建的方法是:

 protected void SiteList_SiteIDChanged()
    {
    }

并且不包含处理程序的正确签名。

现在奇怪的是,如果我在后面的代码中绑定事件: SiteList.SiteIDChanged +=

它说“按(TAB)插入”,插入的方法是:

private void SiteList_SiteIDChanged1(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

那么我缺少什么以便使用发送者创建正确的方法签名并且 eventargs 在第一个实例中自动创建?我知道这是可以做到的,所有 .net 控件都可以做到!


我能够使用与 Visual Studio 中的控件相同的名称来使其工作。

这是我的控制代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI;

namespace TestWebFormsAutoComplete
{
    public class SiteList : System.Web.UI.UserControl, IPostBackEventHandler
    {
        public event EventHandler<EventArgs> SiteIDChanged;

        public void RaisePostBackEvent(string eventArgument)
        {
            int i = 0;
        }

        protected virtual void OnSiteIDChanged(object sender, EventArgs e)
        {
            if (SiteIDChanged != null)
                SiteIDChanged(sender, e);
        }
    }
}

这是我的 web.config 控制/命名空间条目:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2">
      <assemblies>
        <add assembly="TestWebFormsAutoComplete"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5.2" />      
    <pages>
      <controls>
        <add tagPrefix="test" namespace="TestWebFormsAutoComplete" assembly="TestWebFormsAutoComplete"/>
      </controls>
      <namespaces>
        <add namespace="TestWebFormsAutoComplete"/>
      </namespaces>
    </pages>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

这是我的测试 aspx 页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="TestWebFormsAutoComplete._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Test Site List <test:SiteList OnSiteIDChanged="Unnamed_SiteIDChanged" />
    </div>
    </form>
</body>
</html>

在我的测试中,当我填写 SiteList OnSiteIDChanged 事件时,我得到了一个带有“创建新事件”选项的下拉菜单,我选择了它,它为我创建了这个,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestWebFormsAutoComplete
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Unnamed_SiteIDChanged(object sender, EventArgs e)
        {

        }
    }
}

请注意,我没有用于用户控件的基于 ASCX 的前端,它仅包含代码。所以我没有使用带有 src 属性的标签前缀。我怀疑这就是它对你不起作用的原因。

虽然这似乎适用于基于代码的控件,但我认为它不适用于基于源的 ASCX 用户控件。

但是,您仍然可以制作没有 ASCX 前端的 UserControl。您可以使用“Page.LoadControl”等从其他地方将 src 标记加载到您的控件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Visual Studio 中自动创建处理程序签名 的相关文章

随机推荐

  • XSLT 获取特定标记的第一次出现

    假设我有一个完整的 html 文档作为 XML 输入 如果我只想输出 html 中的第一个 或任何 图像 XSLT 文件会是什么样子 选择第一个的一个 XPath 表达式 img 文档中的元素是 img 1 Do note that 一个经
  • 如何规避 Perl 的字符串转义 s/// 中的替换字符串?

    我不知道到底该怎么称呼它 但我已经能够用两条单行语句重现我的问题 从包含以下内容的文件 test txt 开始 foo 运行以下命令后 在 bash 中 perl n e s w oo 1ar print test txt 输出是 far
  • 使用 pyparsing 进行部分评估

    我需要能够采用使用 OpenDocument 公式语法的公式 将其解析为 Python 可以理解的语法 但无需评估变量 然后能够通过更改变量的值来多次评估该公式 公式可以是用户输入 因此 pyparsing 使我能够有效处理公式语法并清理用
  • 我的调用 async/await 在我的操作中返回 Promise {}

    您好 我对 api 调用非常陌生 我开始使用 axios 来获取一副简单的纸牌 我正在尝试执行一个简单的 axios 调用 当我通过控制台记录我的资源时 它会为我提供所需的内容 但是当我返回它时 它给了我 Promise 据我所知 这是因为
  • 如何为通用 lambda 参数定义模板参数? [复制]

    这个问题在这里已经有答案了 解释 当我编写 lambda 作为以 lambda 作为参数的泛型函数的参数时 CLion 及其标准编译器给我一个错误 即 候选模板被忽略 该 lambda 采用泛型类型T并返回另一个未知类型A 我正在编写的容器
  • 为什么fragment中的getContext()有时会返回null?

    Why getContext 有时返回null 我将上下文传递给LastNewsRVAdapter java作为一个论点 但LayoutInflater from context 有时会崩溃 我在 Play 控制台上收到一些崩溃报告 以下是
  • 当通过innerHTML 添加元素时,为什么我的动画会“重播”?

    我有一个小脚本 使用以下命令添加一个名为 doge 的 divinnerHTML当单击我的页面上的按钮时 此页面上有一个带有 CSS 关键帧动画的 div 但是 当我单击按钮在页面上添加名为 doge 的 div 时 CSS 动画会 重播
  • 根据选择值显示和隐藏内容

    我有一个这个 Html 代码
  • IIS 8 和 Plesk web.config 以启用父路径和错误报告

    我正在将一个经典的 ASP 站点从共享托管 IIS 6 站点移动到使用 Plesk 的共享 IIS 8 主机 因此对 IIS 的唯一控制是通过 Plesk 中的一些设置或 web config Plesk 有启用 ASP 支持 我已经完成
  • Firebase 撤销下载网址上的令牌

    当我简单地在 firebase 控制台上 拍摄 图像时 它会自动为我创建一个下载网址 例如 我想让我的文件超级安全 如何删除此下载网址或撤销此令牌 Firebase 控制台在下载 URL 旁边提供了一个 撤销 选项 可用于此目的 在 文件位
  • 每次启动 Google Colab 时都需要安装所需的软件包吗?

    我正在将 Google colab 用于我的一个项目 我有一个完美运行笔记本所需的软件包列表 那么 我是否应该在每次启动 colab 时安装所有软件包 还是只安装一次就可以永远使用它们 您每次都需要安装它 来自FAQ https resea
  • 使用 popToViewController:animated 选择视图控制器的更好方法:

    考虑 self navigationController popToViewController self navigationController viewControllers objectAtIndex 1 animated YES
  • Pyodbc:插入时 SQLExecDirectW 错误

    由于某种原因 我使用以下方法将以下数组完全存储在 SQL 服务器中pyodbc以带有单引号的文本形式 萨钦 尤拉吉 我使用下面的代码插入上面的值 tes table SQLCURSOR execute INSERT INTO Test Ta
  • SDL2 如何在第二台显示器上定位窗口?

    我在用SDL SetWindowPosition定位我的窗口 我可以使用此功能将窗口定位到另一台显示器上吗 UPDATE Using SDL GetDisplayBounds在 Windows 10 中更改文本大小时 不会返回正确的显示器位
  • 特征可以为其继承的特征的方法提供默认实现吗?

    我有一个特点 有几种方法 一些 但不是所有 实现此特征的结构具有其中一种方法的所有相同实现 trait Blabla fn xy self x u32 y u32 gt u32 struct Ding impl Blabla for Din
  • 计算天空中的恒星位置,PyEphem

    我很难找到天空中星星的当前坐标 RA DEC 在网络中我只找到了这个教程 如何使用ephem库 http asimpleweblog wordpress com 2010 07 04 astrometry in python with py
  • 检查数组中值的简写

    有一个简短的方法可以做到这一点吗 if isset a key a key value echo equal more code else echo not equal more code 我需要测试数组上可以存在或不存在的大量值 我觉得这
  • Android NDK Eclipse 构建错误:无法重命名文件。原因:文件存在

    我正在使用 Eclipse 和本机代码构建 Android 项目 95 的情况下这工作正常 但时不时地它会给出以下错误 make libs armeabi libnative so 错误 1 make 删除文件 libs armeabi l
  • 使用 taskkill /F 返回代码 0 终止进程

    我需要终止一个 Windows 进程 java exe 我目前正在使用 taskkill exe F IM java exe 我需要使用 F 选项 因为这是一个关键进程 但这样我得到返回代码 1 而不是我需要返回代码 0 当我不使用 F 杀
  • 在 Visual Studio 中自动创建处理程序签名

    在 c asp net 4 0 VS2015 中工作 我创建了一个用户控件 它只是一个下拉列表 其中包含用户可以传递给它的几个其他属性 以及一个事件和委托 当下拉列表更改时 会触发 OnSelectedIndexChanged 然后检查事件