asp.net是如何获得客户端的事件并以此调用服务端的方法的?

在页面中<asp:TextBox><asp:Button>等控件时,在浏览器端查看源代码,发现生成的页面中并没有什么特别的脚本代码,只是在表单中多了两个隐藏的input,... 在页面中<asp:TextBox><asp:Button>等控件时,在浏览器端查看源代码,发现生成的页面中并没有什么特别的脚本代码,只是在表单中多了两个隐藏的input,我原本以为asp.net调用后台函数是通过客户端脚本进行的,但是现在看来不是这样了。那么asp.net是如何获得客户端的事件并以此调用服务端的方法的?就是说,当我在浏览器中按下一个按钮控件时,服务器端如何知道我按下了按钮、按下了哪个按钮、该调用哪个处理函数?这个过程究竟是如何进行的? 展开
 我来答
sd_maqian
2011-05-09 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:76.7万
展开全部

以用户登录界面为例说明一下吧:

当用户输入用户名和密码,然后点击登录按钮时,会触发函数,

登录按钮的代码如下:

<asp:ImageButton ID="btnLogin" runat="server" ImageUrl="Images/login_button1.png"

                        Width="67" Height="26" BorderWidth="0" OnClick="btnLogin_Click" />

所以触发的函数是OnClick="btnLogin_Click"

下面的函数考虑的比较详细,不需详细了解的。只知道在后台调用的是btnLogin_Click,就可以了。

protected void btnLogin_Click(object sender, EventArgs e)

    {

        string strUserName = Request.Form["UserName"].ToString().Trim().ToLower();

        string strPassWord = Sha1.GetSha1(Request.Form["PassWord"].ToString().Trim());

        string SqlString = "SELECT * FROM Users WHERE Login = '" + strUserName + "'";

        DataTable dt = DataAccess.SelectBySql("SOC2.ConnectionString.Sql", SqlString);

        //用户名存在,判断输入密码是否正确

        if ((dt.Rows.Count == 1) && (dt.Rows[0][8].ToString() != "1"))

        {

            string SqlString1 = "Select * from Users Where Pass='" + strPassWord + "'";

            DataTable dt1 = DataAccess.SelectBySql("SOC2.ConnectionString.Sql", SqlString1);

            if (dt1.Rows.Count == 0)

            {

                Response.Write("<script language=javascript>window.alert('密码输入错误');location.href='UserLogin.aspx'</script>");

                //获取当前尝试登录的用户的登录失败次数,并对其加1

                if (!strUserName.Equals("admin"))

                {

                    int i = Convert.ToInt32(dt.Rows[0][7]) + 1;

                    DataAccess.Update("SOC2.ConnectionString.Sql", "Update Users SET FailCount = " + i + " where Login =  '" + strUserName + "'");

                    if (i >= 3)

                    {

                        DataAccess.Update("SOC2.ConnectionString.Sql", "Update Users SET IsLocked = 1 where Login =  '" + strUserName + "'");

                    }

                }

                // 写入登录失败日志。

                string sqlGetUserId = string.Format("SELECT ID from Users WHERE Login = '{0}'", strUserName);

                dt = DataAccess.SelectBySql("SOC2.ConnectionString.Sql", SqlString);

                if (dt.Rows.Count > 0)

                {

                    WriteLoginLog(dt.Rows[0][0].ToString(), false);

                }

            }

            else

            {

                Int64 loginId = WriteLoginLog(dt.Rows[0]["ID"].ToString(), true);

                Session["LoginID"] = loginId;

                Session["User_ID"] = (int)dt.Rows[0]["ID"];

                Session["User_Name"] = strUserName;

                Application[dt.Rows[0]["ID"].ToString()] = loginId;

                string SqlString2 = "select Role_ID,Role.Name, Role.Permission from Role inner join Users on Role.ID = Users.Role_ID where Users.Login = '" + strUserName + "'";

                DataTable dt2 = DataAccess.SelectBySql("SOC2.ConnectionString.Sql", SqlString2);

                Session["User_Role"] = dt2.Rows[0]["Name"].ToString();

                Session["Role_ID"] = (int)dt2.Rows[0]["Role_ID"];

                Session["UserPermission"] = (UserPermission)(int)dt2.Rows[0]["Permission"];

                Response.Redirect("Default.aspx");

            }

        }

        //用户名不存在或帐号累计输入错误3次

        else

        {

            if(dt.Rows.Count == 0)

            {

                Response.Write("<script language=javascript>window.alert('你输入的用户名不存在');location.href='UserLogin.aspx'</script>");

            }

            else

            Response.Write("<script language=javascript>window.alert('你的帐号累计输入错误3次,已被锁定');location.href='UserLogin.aspx'</script>");

        }

    }

hwdcm
2011-05-08 · 超过12用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:45.3万
展开全部
请注意 页面中 的 viewstate<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/w。。。。 这里面 就包含 事件源及事件参数。服务器端就知道 谁被点击了。
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猫之良品
2011-05-08 · TA获得超过1475个赞
知道小有建树答主
回答量:2060
采纳率:55%
帮助的人:782万
展开全部
submit按钮点击就会提交,可以用name来区分那个按钮。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
噗嘶船长92
2011-05-09
知道答主
回答量:31
采纳率:0%
帮助的人:4.3万
展开全部
.designer.cs 个人估计应该是这个文件里面起了点效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式