后台如何知道我点的哪个按钮

巨应打字员 2009-09-24 09:59:11
asp.net是如何知道我点击的哪个按钮?
这些说白了,解析到客户端只是一个普通的提交按钮,但是页面上有3个提交按钮,后台服务器怎么知道我点的是哪一个??页面代码很干净,学了这么久。我发现我连这个基本的都没搞懂

  <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5NzEzOTY2NTJkZL4UoV8a2elDynZUbC0nqy+FVeH1" />
</div>

<div>
<label for="txtLoginName">用户名:</label><input name="txtLoginName" type="text" id="txtLoginName" />
<br />
<label for="txtPassword">密  码:</label><input name="txtPassword" type="text" id="txtPassword" /><br />
<label for="txtEmail">邮  箱:</label><input name="txtEmail" type="text" id="txtEmail" /><br />
<input type="submit" name="btnReg" value="reg" id="btnReg" /><input type="submit" name="btnLogin" value="login" id="btnLogin" /><br /> <select name="ddlExists" id="ddlExists">
<option selected="selected" value="f_LoginName">帐号</option>
<option value="f_Email">邮箱</option>

</select>
<input name="txtValue" type="text" id="txtValue" /><br />
input type="submit" name="btnExists" value="检查帐号邮箱" id="btnExists" />
</div>
</form>
</body>
...全文
238 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johan. 2009-09-25
  • 打赏
  • 举报
回复
路过看看.
Working20000 2009-09-25
  • 打赏
  • 举报
回复
页面有视图状态保存的
CAI_JUN_JIE 2009-09-24
  • 打赏
  • 举报
回复
ddddddddddddd
Teng_s2000 2009-09-24
  • 打赏
  • 举报
回复
这个是aspx页面,你只是查看源代码那儿看到的HTML吧
看aspx中就会有按钮邦定的事件的,点哪个按钮执行哪个事件
woaipanda 2009-09-24
  • 打赏
  • 举报
回复
.NET framework通过委托向外提供了一种回调函数的机制。而事件是一种特殊的委托。
可以这么说,在类型中存放了一个已订阅事件的方法的列表,当事件发生时,类型就通知列表中已订阅事件的所有方法。
而这里所说的列表,就相当于委托“EventHandler”,当你定义一个事件的时候,比如是CLICK事件,就会把这个事件挂在这个委托上面,this.button1.Click += new System.EventHandler(this.button1_Click);事件的签名和委托的签名是一样的(返回值为VOID,参数为object sender, EventArgs e),只要是签名一样的都可以挂到这个委托上面。
当你点击这个BUTTON的时候,那么就会调用这个事件了...
举一个事件的例子:
namespace EventDemo
{
public delegate void EventHandler<TEventArgs>(Object sender,TEventArgs e) where TEventArgs:EventArgs;

public class Program
{
public static void Main(string[] args)
{
SendFax("A1", "A2", "About today's meeting");
}

public static void SendFax(String from,String to,String subject)
{
MailManager mm = new MailManager();
Fax fax = new Fax(mm);
mm.SimulateNewMail(from, to, subject);
}
}

internal class NewMailEventArgs : EventArgs
{
private readonly String m_from, m_to, m_subject;

public NewMailEventArgs(String from, String to, String subject)
{
m_from = from;
m_to = to;
m_subject = subject;
}

public String From
{
get
{ return m_from; }
}

public String To
{
get
{ return m_to; }
}

public String Subject
{
get
{ return m_subject; }
}
}


internal class MailManager
{
public event EventHandler<NewMailEventArgs> NewMail;

protected virtual void OnNewMail(NewMailEventArgs e)
{
EventHandler<NewMailEventArgs> temp = NewMail;
if (temp != null)
{
temp(temp, e);
}
}

public void SimulateNewMail(String from, String to, String subject)
{
NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
OnNewMail(e);
}
}

internal sealed class Fax
{
public Fax(MailManager mm)
{
mm.NewMail += FaxMsg;
}

private void FaxMsg(Object sender, NewMailEventArgs e)
{
Console.WriteLine("Faxing mail message:");
Console.WriteLine("From={0},To={1},Subject={2}",e.From,e.To,e.Subject);
Console.ReadLine();
}
}
}
你可以多看看关于委托和事件的东西,希望对你有所帮助
我姓区不姓区 2009-09-24
  • 打赏
  • 举报
回复
除了viewstate这个隐藏域之外,还有一个name为__EVENTVALIDATION的隐藏域,就是用来存放触发事件的控件的name的,你在Page_Load中写入如下代码:

protected void Page_Load(object sender, EventArgs e)
{
foreach (string s in Request.Form)
Response.Write(string.Format("{0}:{1}<br />", s, Request.Form[s]));
}



然后触发某个PostBack操作,看看输出的__EVENTVALIDATION是不是带有形如*******=触发控件的UniqueID的字符串
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dhswg20077 的回复:]
反正肯定和javascript没关系,我禁用一样可以。 大家能说的更清楚一点吗
[/Quote]

因为你是UseSubmitBehavior的按钮,所以是我在#4楼所说的那种机制提交的。
  • 打赏
  • 举报
回复
这只是对submit按钮而言的。对于其它按钮(在后台设计时你可以把一个按钮的UseSubmitBehavior属性改为false试试),asp.net在输出html的时候形成了html对象的属性

onclick="javascript:__doPostBack('btnReg','')"

这种,这个脚本其实很简单,可以在页面上看到

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}

这时候才是通过那两个隐藏域提交给后台。asp.net在处理页面的时候也会从__EVENTTARGET中找出对应的button,触发器click事件。
zjybushiren88888 2009-09-24
  • 打赏
  • 举报
回复
__EVENTTARGET || .Request.Form 表单变量
巨应打字员 2009-09-24
  • 打赏
  • 举报
回复
反正肯定和javascript没关系,我禁用一样可以。 大家能说的更清楚一点吗
zjybushiren88888 2009-09-24
  • 打赏
  • 举报
回复
eg:
  <form id="form1" runat="server">
<div>
<input type="submit" name="MySubmit" value="submit_1" />
<input type="submit" name="MySubmit" value="submit_2" />
</div>
<div>
<asp:Label ID="lblSubmit" runat="server"></asp:Label>
</div>
</form>


 protected void Page_Load(object sender, EventArgs e)
{
string val = string.Empty;

if (Request["MySubmit"] != null)
{
val = Request["MySubmit"];
}
this.lblSubmit.Text = val;
}
igelf 2009-09-24
  • 打赏
  • 举报
回复
Request.Form["__EVENTTARGET"]
  • 打赏
  • 举报
回复
当你点击一个按钮的时候,假设你点击btnLogin,浏览器会在提交的信息里包括大致是:

.....(其它html对象的value提交值)....&btnLogin=btnLogin

这样的语句。而此时,btnReg并没有提交值。

asp.net页面处理时,根据btnLogin这个名字找到对应的Button控件,并触发它的Click事件。
wowmsld 2009-09-24
  • 打赏
  • 举报
回复
最简单的,搞个<input type='hidden'>

然后点击按钮之后,把按钮的ID赋值给hidden,然后在后台获取hidden的值~
jerry_zuo 2009-09-24
  • 打赏
  • 举报
回复
根据你定义的按钮事件去判定的
zhouyanfss 2009-09-24
  • 打赏
  • 举报
回复
用一个hidden保存啊,用JS提交
yidichaxiang 2009-09-24
  • 打赏
  • 举报
回复
aaaa

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧