[英]calling server side event from html button control
我正在使用 ASP.Net 创建一个应用程序,其中在 aspx 页面上有一个 HTML 按钮。
<input type="submit" id="btnSubmit" runat="server"
style="background-image:url(App_Themes/default/Images/quiz_class/btn_submit.jpg);
width:80px; height:29px;" onserverclick="btnSubmit_ServerClick" />
但是当我点击按钮时,它不会调用 aspx.cs 页面上的 btnSubmit_ServerClick 事件。
我不想使用asp控制按钮。
请帮忙..
如果您可以通过指定runat="server"
将输入按钮转换为服务器端控件,并且您使用的是asp.net
,则可以选择使用HtmlButton.OnServerClick属性。
<input id="foo "runat="server" type="button" onserverclick="foo_OnClick" />
这应该工作并在服务器端代码中调用foo_OnClick
。 另请注意,基于上面链接的Microsoft文档,您还应该能够使用HTML 4.0标记。
在您的aspx页面上,使用常见的嫌疑人定义HTML Button元素:runat,class,title等。
如果此元素是数据绑定控件的一部分(即:网格视图等),您可能希望使用CommandName和CommandArgument作为属性。 添加按钮的内容和结束标记。
<button id="cmdAction"
runat="server" onserverclick="cmdAction_Click()"
class="Button Styles"
title="Does something on the server"
<!-- for databound controls -->
CommandName="cmdname">
CommandArgument="args..."
>
<!-- content -->
<span class="ui-icon ..."></span>
<span class="push">Click Me</span>
</button>
在页面后面的代码中,元素将调用将被定义为元素的ID_Click事件函数的处理程序。
protected void cmdAction_Click(object sender, EventArgs e)
{
: do something.
}
还有其他解决方案,如使用自定义控件等。另请注意,我在VS2K8中的项目中使用此实时。
希望这会有所帮助。 请享用!
完成此任务的最简单方法是覆盖RaisePostBackEvent方法。
<input type="button" ID="btnRaisePostBack" runat="server" onclick="raisePostBack();" ... />
在你的JavaScript中:
raisePostBack = function(){
__doPostBack("<%=btnRaisePostBack.ClientID%>", "");
}
在你的代码中:
protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
//call the RaisePostBack event
base.RaisePostBackEvent(source, eventArgument);
if (source == btnRaisePostBack)
{
//do some logic
}
}
只需在按钮点击事件结束时使用它
protected void btnAddButton_Click(object sender, EventArgs e)
{
... save data routin
Response.Redirect(Request.Url.AbsoluteUri);
}
您可以使用事件处理程序serverclick,如下所示
// cmdAction是HTML按钮的id,如下所示
<body>
<form id="form1" runat="server">
<button type="submit" id="cmdAction" text="Button1" runat="server">
Button1
</button>
</form>
</body>
// cs代码
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
cmdAction.ServerClick += new EventHandler(submit_click);
}
protected void submit_click(object sender, EventArgs e)
{
Response.Write("HTML Server Button Control");
}
}
对于尝试处理复选框的人来说,这些解决方案都不起作用,因为您需要它是 HTML 输入(而不是 HTML 按钮)。
一旦您添加 type="checkbox" 后,SPArcheon 的答案就不会起作用,这是.checked
运算符在代码隐藏中工作所需的。 一旦添加type="checkbox"
,HTML 输入框就没有OnServerClick
、 ServerClick
和CheckedChanged
。 您所拥有的只是ServerChanged
,这是无用的,因为它需要刷新整个页面。
实际上,我不得不使用 CSS 使 HTML 按钮类似于复选框,使用 Bootstrap 的 btn-outline-secondary 类作为起点。
.btn-checkbox-unchecked {
padding: .35rem .35rem !important;
font-size: .875rem !important;
line-height: .5 !important;
border-radius: .15rem !important;
border-width: .20em !important;
}
.btn-checkbox-checked {
padding: .1rem .1rem !important;
font-size: .6rem !important;
line-height: .5 !important;
border-radius: .15rem !important;
border-width: .20em !important;
border-color: #0060df !important;
background-color: #0060df !important;
}
.btn-checkbox:hover {
border-color: #676774 !important;
background-color: #0250BB !important;
}
在aspx中:
<button class="btn btn-xs btn-outline-secondary btn-checkbox" id="btnFakeCheckbox" runat="server" clientidmode="static" autopostback="true" data-bs-toggle="button" autocomplete="off"></button>
然后在您的代码隐藏中,您可以相应地设置属性(类):
btnFakeCheckbox.Attributes.Add("class", "btn btn-xs btn-secondary btn-checkbox-checked active")
btnFakeCheckbox.Attributes("aria-pressed") = "true"
btnFakeCheckbox.InnerHtml = "<i class='fas fa-check'></i>"
(注意最后一行的字体真棒检查图标,您必须将其包含在您的 aspx 中)
如果有人有 Bootstrap 5 切换开关的解决方案,请告诉我。
请遵循以下教程: http : //decoding.wordpress.com/2008/11/14/aspnet-how-to-call-a-server-side-method-from-client-side-javascript/
在旁注:ASP.NET生成一个客户端javascript函数,您可以从您自己的函数调用它来执行您想要的回发。
- 有关劫持回发事件的更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.