【问题标题】:Where is the code that runs when a button is clicked in ASP.NET在 ASP.NET 中单击按钮时运行的代码在哪里
【发布时间】:2014-06-19 04:51:36
【问题描述】:

我正在尝试通过使用 Visual Studio 2010 分析默认网站项目来了解 ASP.NET 的基本方面。

在Register.aspx页面中有用户注册字段和这个按钮:

<asp:Button ID="CreateUserButton" runat="server" CommandName="MoveNext"
    Text="Create User" ValidationGroup="RegisterUserValidationGroup"/>

该按钮确实注册了一个用户,但我找不到正在运行的代码段,更不用说代码与该按钮的关联方式了。我尝试搜索所有标识符关键字的解决方案,但没有发现任何相关内容。在网上搜索提到了一个我也找不到的Button.OnClick方法。

任何有关 ASP.NET 基本方面的信息都会对我有所帮助;提前致谢。

编辑:分层,按钮在里面:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:CreateUserWizard ID="RegisterUser" runat="server" EnableViewState="false" OnCreatedUser="RegisterUser_CreatedUser">
        <WizardSteps>
            <asp:CreateUserWizardStep ID="RegisterUserWizardStep" runat="server">
                <ContentTemplate>
                    <div class="accountInfo">
                        <p class="submitButton">

在后面的代码中有一个 RegisterUser_CreatedUser 方法,它确实:

protected void RegisterUser_CreatedUser(object sender, EventArgs e)
{
    FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);

    string continueUrl = RegisterUser.ContinueDestinationPageUrl;
    if (String.IsNullOrEmpty(continueUrl))
    {
        continueUrl = "~/";
    }
    Response.Redirect(continueUrl);
}

我期待在数据库中插入某种用户数据。我想知道,这就是按钮的全部功能吗?

【问题讨论】:

  • 这个按钮是什么?像gridview之类的东西?它可能会有一个 OnCommand="SomeMethodName" 属性
  • 没有 OnCommand 属性,但它引用了后面代码中的方法。我用更多信息编辑了这个问题。谢谢。

标签: asp.net .net visual-studio-2010 button


【解决方案1】:

aspx 页面还将有一个“代码隐藏”文件,其名称相同但扩展名不同(点后面的字母),这取决于它所使用的语言。Visual Basic 文件具有 .vb 扩展名,而 C# 文件有一个 .cs 扩展名。

尝试查找 Register.vb 或 Register.cs,看看是否更有成效。

如果您使用的是 Visual Studio 之类的开发环境,您可能会发现在解决方案资源管理器中,您可以单击展开 aspx 文件并在下面查看其代码隐藏文件。如果您不是,您可能想获取一份免费快递版:

http://www.visualstudio.com/en-US/products/visual-studio-express-vs

当您找到代码隐藏时,查找名为“MoveNext”的方法 - 这是您单击按钮时将运行的代码,由 asp 的 CommandName 属性指定:标记。

【讨论】:

  • 谢谢,我搜索了MoveNext 方法,但一无所获。我确实在后面的代码中找到了两种方法,PageLoadRegisterUser_CreatedUser。当我放置断点并单击按钮时,后者被击中,但我期待像在数据库中插入用户数据这样的代码,但我发现,总结:FormsAuthentication.SetAuthCookie(...)Response.Redirect(continueUrl)。对我来说仍然很困惑,我会深入挖掘。
【解决方案2】:

您正在查看的按钮应该在CreateUserWizardStep 控件中。我对这个控件了解不多,但可能控件会查找具有CommandName = "MoveNext" 的子按钮,然后它会钩住其点击事件。

尝试将CommandName 更改为“test”之类的其他内容,它不应该在RegisterUser_CreatedUser 事件上遇到断点。

还要注意CreatedUser

如果您还查看 web.config,您会发现这个 ConnectionString

<connectionStrings>
    <add name="ApplicationServices"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />
</connectionStrings>

由于您使用的是 Visual Studio 的默认 Web 应用程序项目,所有这些事情都已由 Visual Studio 为您完成。

【讨论】:

  • 现在一切都变得更有意义了,谢谢。关于我测试过的CreateUserWizardStep,是的,它似乎在寻找MoveNext 命令。
【解决方案3】:

你把一些事情复杂化了,你完全没有错,但部分是 VS 2010 IDE 附带的项目模板。让我来一一帮助你:

  1. 学习 ASP.Net 基础知识:为此,您应该使用 Visual Studio 2010 中提供的“ASP.NET 空 Web 应用程序”项目模板。您已经从“ASP.NET”开始。 NET Web 应用程序”项目模板,其中包含复杂的内容 你。重新开始“ASP.NET Web 应用程序”对于任何人来说都是显而易见的选择,但它带有一个用于 ASP.NET 成员身份验证的预编译样板代码及其相关控件,这是您所有困惑的根本原因。要开始使用基础知识,请使用我上面建议的“ASP.NET 空 Web 应用程序”项目模板,然后添加一个新的“Web 表单”,然后添加各种基本的服务器 Web 控件,如按钮或文本框,以开始使用概念比如事件处理和代码背后的东西。

  2. 你的其他问题 -

    "按钮确实注册了一个用户,但是我找不到那段代码 那是运行的,更不用说代码是如何与该按钮相关联的”

    那是因为您在Register.aspx 页面上看到的按钮是 不是单个服务器 Web 控件,而是复合控件 asp:CreateUserWizard 的一部分。各种控件的所有事件,无论是按钮、标签还是文本框,都属于asp:CreateUserWizard 复合控件的一部分,由父复合控件asp:CreateUserWizard 处理。您不会在代码隐藏文件中找到所有这些代码,因为这些代码存在于您的项目中引用的 System.Web.dll 中。

    由于复合控件上的所有控件事件都由编写在复合控件代码中的通用函数处理,因此必须准确区分用户单击了哪个控件(以采取适当的操作)导致当前页面回传CommandName 属性进入图片。在父复合控件的通用函数中有一个 switch case 语句,它使用CommandName 属性。

所以基本上发生的事情是,当您尝试开始了解 ASP.Net 服务器 Web 控件和事件处理的基础知识时,您实际上进入了理解 ASP.Net 成员资格和角色 Web 服务器控件和提供程序的道路,这可能比较难初步了解和掌握。希望这可以帮助您入门并进一步了解 ASP.Net 世界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多