原谅我对这个问题缺乏一点ASP.NET知识:)
以下是场景:我在VS2010中玩游戏,我创建了一个新的ASP.NET Web Application
(在Visual C#下,Web模板)。没什么特别的,只是一个基本的Web应用程序。没有花哨的MVC东西。
模板生成的解决方案中包含一个登录页面; Account/Login.aspx
。在该页面上,是一个登录按钮; HTML看起来像这样:
<p class="submitButton">
<asp:Button ID="LoginButton"
runat="server"
CommandName="Login"
Text="Log In"
ValidationGroup="LoginUserValidationGroup"/>
</p>
再一次,没什么特别的。现在,背后的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Account_Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
}
}
更不那么花哨。最后,来自web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
所以,这是我无法弄清楚的:当我运行应用程序时,我可以点击登录按钮,应用程序 - 但某些东西的代码在哪里?
来自WPF世界(在ASP.NET中有一些背景),我的第一直觉是在CommandName
上进行归零 - 但搜索与“登录”相关的任何内容都会变得干涸。我的第二直觉是查看代码隐藏,但同样,它非常稀疏,我看不到任何与点击登录按钮有关的内容。
那么这个按钮背后的“神奇”在哪里发生?必须有的东西;我觉得我忽略了一些正好坐在我眼前的东西。
答案 0 :(得分:9)
如果您指的是Visual Studio开箱即用的默认Web应用程序(不是空的),您会注意到登录按钮位于<asp:Login>
服务器控件内。这就是魔法发生的地方。如果你查看web.config,它会与ASP.NET成员资格提供程序连接,你会看到对它的引用。
答案 1 :(得分:2)
该页面正在回发。但没有连接事件处理程序,所以它什么都不做。我知道如何通过添加按钮时生成的代码来执行此操作。该按钮生成一些JavaScript代码,调用函数来回发页面。
您需要添加一个事件处理程序。最简单的方法是双击表单设计器上的按钮,它将为您生成代码。
答案 2 :(得分:1)
Button
是服务器端控件 - 这会导致它在单击时回发。
如果你查看页面的来源,你会看到一个__dopostback
的调用,这是一个将页面发回给自己的javascript函数。
此时,页面重新加载,这可能就是您所看到的。
答案 3 :(得分:1)
没有任何反应(除了回发到服务器),CommandName="Login
是您的样板代码。没有OnCommand="CommandBtn_Click"
以及code-behind
答案 4 :(得分:0)
我觉得你想要源代码。您有兴趣了解提供程序如何执行登录。可以说螺母和螺栓......
http://weblogs.asp.net/scottgu/archive/2006/04/13/442772.aspx