表单提交后,如何得知是哪个按钮提交的表单?

震我一下巧克力 2009-05-12 08:56:16
假设我有4 Submit 按钮,也就是

<input type="sumbit" name="submit_1" value="submit_1" />
<input type="sumbit" name="submit_2" value="submit_2" />
<input type="sumbit" name="submit_3" value="submit_3" />
<input type="sumbit" name="submit_4" value="submit_4" />

在表单提交后,我如何得知,是哪个按钮提交的表单?
...全文
540 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2009-05-13
  • 打赏
  • 举报
回复
有的走 __EVENTTARGET ;
有的走 .Request.Form 表单变量
Dobzhansky 2009-05-13
  • 打赏
  • 举报
回复
好久以前写的了, 你参照参照

internal String GetFormPostbackTriggerId()
{
if (HttpContext.Current == null) return String.Empty;
if (!HttpContext.Current.Request.Url.AbsolutePath.EndsWith(".aspx")) return String.Empty;

string _triggerControlId = HttpContext.Current.Request.Form["__EVENTTARGET"];
if (String.IsNullOrEmpty(_triggerControlId))
{
foreach (string str in HttpContext.Current.Request.Form)
{
Control c = this.Page.FindControl(str);
if (c is Button)// 暂时忽略 imagebuttion
{
_triggerControlId = c.ID;
break;
}
}
}
else
{
string[] controlCollections = _triggerControlId.Split('$');
Control ctl = null;
ctl = this.Page;
foreach (string s in controlCollections)
{
ctl = ctl.FindControl(s);
if (null == ctl)
break;
}
_triggerControlId = (null == ctl) ? null : ctl.ID;
}
return _triggerControlId;
}
Fibona 2009-05-13
  • 打赏
  • 举报
回复
protected void Button_Click(object sender, EventArgs e)
{
if(sender is Button)
{
Button tb=(Button)sender;
//
string btnId=tb.Id;
}

}
zming 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fkago 的回复:]
放上四个asp按钮,并添加上单击事件,页面上没有生成任何JavaScript代码,为什么在后台就可以区分出是哪一个按钮点击的?

<asp:Button ID="Button_1" runat="server" Text="Assassiate" OnClick="Button1_Click" />
<asp:Button ID="Button_2" runat="server" Text="Assassiate" OnClick="Button2_Click" />
<asp:Button ID="Button_3" runat="server" Text="Assassiate" OnClick="Button3_Click" />
<asp:Button ID="Butt…
[/Quote]

LZ, 页面上有没有生成JavaScript代码,不是看 aspx 页面的内容,

请在浏览器中,点击菜单栏上的“查看”-->“源文件”,你就知道有没有 JavaScript 代码了。

这也就是 JSP 高效运行而 ASPX 低效运行的原因。
当然,如果你愿意并且精通HTML与HTTP的话,也可以使用原始的ASP模式开发高效运行的ASPX程序。
zming 2009-05-13
  • 打赏
  • 举报
回复
LZ的问题属于 HTML 基本原理

例一:
aspx页面

<form id="form1" runat="server">
<div>
<input type="submit" name="submit_1" value="submit_1" />
<input type="submit" name="submit_2" value="submit_2" />
<input type="submit" name="submit_3" value="submit_3" />
<input type="submit" name="submit_4" value="submit_4" />
</div>
<div>
<asp:Label ID="lblSubmit" runat="server"></asp:Label>
</div>
</form>


后置cs代码

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

if (Request["submit_1"] != null)
{
val = Request["submit_1"];
}
else if (Request["submit_2"] != null)
{
val = Request["submit_2"];
}
else if (Request["submit_3"] != null)
{
val = Request["submit_3"];
}
else if (Request["submit_4"] != null)
{
val = Request["submit_4"];
}
this.lblSubmit.Text = val;
}


例一的方法并不好,下面是例二:
aspx页面

<form id="form1" runat="server">
<div>
<input type="submit" name="MySubmit" value="submit_1" />
<input type="submit" name="MySubmit" value="submit_2" />
<input type="submit" name="MySubmit" value="submit_3" />
<input type="submit" name="MySubmit" value="submit_4" />
</div>
<div>
<asp:Label ID="lblSubmit" runat="server"></asp:Label>
</div>
</form>


后置cs代码

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

if (Request["MySubmit"] != null)
{
val = Request["MySubmit"];
}
this.lblSubmit.Text = val;
}

icezs 2009-05-13
  • 打赏
  • 举报
回复
表单提交会把触发提交的元素ID回传给服务端.服务端有个VIEWSTATE维护表单状态.
vip_hjb 2009-05-13
  • 打赏
  • 举报
回复
你自己是想要客户端的事件还是服务器端的事件哟
你上面那样写是客户端的事件哈
你直接用BUTTON控件嘛 对每个按纽写不一样的事件就可以了哇
哪里来的那么麻烦哟
gzto020 2009-05-13
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
感谢每一个参与讨论的人,谢谢你们
  • 打赏
  • 举报
回复
感谢zming讲解,我的问题已经解决了
如果仅仅放上了 asp:button 在浏览器中“查看”-->“源文件”,没有JavaScript
Dobzhansky 2009-05-12
  • 打赏
  • 举报
回复
客户端无非就是 html form + js

一个html表单回发能诱发一次 page 及其控件的生命再次获得,
没什么神奇的, 只是没文档记载而已
Dobzhansky 2009-05-12
  • 打赏
  • 举报
回复
__dopostback 脚本

当时写过一个判断的

button 和 imagebutton 不同

好像不同控件也不一样,

明天回去看看代码.

  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhaoqiliang527 的回复:]
建立四个form表单,每个里面放一个html按钮,提交时就只提交当前的form表单啦!明白否?
[/Quote]
服务器上可以写按钮的服务器事件,服务器怎么知道是哪个按钮提交的表单,页面中没有看到任何JavaScript代码啊
  • 打赏
  • 举报
回复
呵呵,你想学asp.net,可以自己找一些真正讲明白asp.net机制的书籍。例如《深入剖析 Asp.net组件设计》那一本书,虽然是讲几年前过时的asp.net1.1的,但是对于asp.net系统架构入门很好。
zhaoqiliang527 2009-05-12
  • 打赏
  • 举报
回复
建立四个form表单,每个里面放一个html按钮,提交时就只提交当前的form表单啦!明白否?
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ccs02287 的回复:]
记录这个做什么?
[/Quote]
学习
空心兜兜 2009-05-12
  • 打赏
  • 举报
回复
记录这个做什么?
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 melon23 的回复:]
不知道是不是你要的:
[code=c#]
protected void Button_Click(object sender, EventArgs e)
{
Button bn = (Button)sender;
Response.Write(bn.ID+Request.Form["test"]);

}
[/code]
[/Quote]

我要知道为什么object sender就是触发事件的按钮,也就是说服务器怎么知道是哪个按钮提交了表单,而不是去找服务器,问服务器哪个按钮提交了表单

也就是
假设我有4 Submit 按钮,也就是
HTML code

<input type="sumbit" name="submit_1" value="submit_1" />
<input type="sumbit" name="submit_2" value="submit_2" />
<input type="sumbit" name="submit_3" value="submit_3" />
<input type="sumbit" name="submit_4" value="submit_4" />


在表单提交后,我如何得知,是哪个按钮提交的表单?


melon23 2009-05-12
  • 打赏
  • 举报
回复
不知道是不是你要的:
<body>
<form id="form1" runat="server">
<input id="test" type="text" name="test" />
<asp:Button ID="Button_1" runat="server" Text="Assassiate" OnClick="Button_Click" />
<asp:Button ID="Button_2" runat="server" Text="Assassiate" OnClick="Button_Click" />
<asp:Button ID="Button_3" runat="server" Text="Assassiate" OnClick="Button_Click" />
<asp:Button ID="Button_4" runat="server" Text="Assassiate" OnClick="Button_Click" />
</form>
</body>

protected void Button_Click(object sender, EventArgs e)
{
Button bn = (Button)sender;
Response.Write(bn.ID+Request.Form["test"]);

}
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 melon23 的回复:]
在后台创建个方法(事件)时,net就自动好给你把它和按钮关联起来。当点击按钮时这样就知道哪里发来的。
这和委托事件有关,具体最好看相关书籍。
[/Quote]
net就自动好给你把它和按钮关联起来 怎么关联起来的?通过什么关联的?

当表单提交给了.net服务端后,服务端如何得知是客户端的哪一个按钮提交了这个表单?
只有知道是哪个按钮提交的表单,才有后面的服务器事件
加载更多回复(5)

62,046

社区成员

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

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

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

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