Asp.net 当onclientclick为false时停止onclick激发?
是否可以使用按钮的Asp.net 当onclientclick为false时停止onclick激发?,asp.net,vb.net,asp.net-3.5,onclientclick,Asp.net,Vb.net,Asp.net 3.5,Onclientclick,是否可以使用按钮的onclientclick属性执行客户端检查。如果检查返回true,则触发onclick事件。如果客户端检查返回false,请不要触发onclick事件 可能吗 更新: 这两项工作: Stops the form from submitting: OnClientClick="return false;" 接下来的2个选项不起作用: // in js script tag function mycheck() { return false; } // in as
onclientclick
属性执行客户端检查。如果检查返回true
,则触发onclick
事件。如果客户端检查返回false
,请不要触发onclick
事件
可能吗
更新:
这两项工作:
Stops the form from submitting:
OnClientClick="return false;"
接下来的2个选项不起作用:
// in js script tag
function mycheck() {
return false;
}
// in asp:button tag
OnClientClick="return mycheck();"
它两次提交表单
为什么会这样?是的,您可以在onclientClick函数调用中使用
preventDefault()
或
function onclientClickFun(e)
{
if(!IsValidationSuccess)
{
return false;
}
}
当然。如果在OnClientClick
中使用return false
,将阻止任何导航。因此,您的代码如下所示:
<asp:LinkButton runat="server" OnClientClick="if(!ValidatePage()) { return false;}" />
要在调用函数后单击OnClient中添加return
。否则,即使函数返回false,按钮也会发回
<asp:button ID="Button1" runat="server" OnClick="Button1_Click"
OnClientClick="return checkValidation()" Text="Submit" />
<script type="text/javascript">
function checkValidation() {
return confirm('Everything ok?');
}
</script>
函数checkValidation(){
返回确认(“一切正常吗”);
}
我也遇到了这个问题。不想在每个linkbutton上都设置OnClientClick=return false。有了一个简单的页面,使用锚定和避免asp为您填充href就更容易了
然而,这并不总是可能的。因此,一个简单的结论就是继承LinkButton并添加一个类似AutoPostBack的变量。如果为false,则只需使用html覆盖输出或添加OnClientClick-in。我真的不喜欢内联标签
namespace My.WebControls {
[ToolboxData("<{0}:LinkButton runat=server ID=btn></{0}:LinkButton>"), ParseChildren(true), ToolboxItem(true)]
public class LinkButton : System.Web.UI.WebControls.LinkButton {
private bool _postback = true;
[Bindable(true), Category("Behavior"), DefaultValue(true), Description("Gets or Sets the postback click behavior")]
public bool AutoPostBack { get { return _postback; } set { _postback = value; } }
protected override void Render(System.Web.UI.HtmlTextWriter writer) {
if(!AutoPostBack){
this.OnClientClick = "return false";
}
base.Render(writer);
}
}
}
namespace My.WebControls{
[ToolboxData(“”),ParseChildren(true),ToolboxItem(true)]
公共类链接按钮:System.Web.UI.WebControl.LinkButton{
private bool_postback=true;
[Bindable(true)、Category(“行为”)、DefaultValue(true)、Description(“获取或设置回发单击行为”)]
public bool AutoPostBack{get{return}u postback;}set{{u postback=value;}
受保护的覆盖无效渲染(System.Web.UI.HtmlTextWriter编写器){
如果(!AutoPostBack){
this.OnClientClick=“return false”;
}
base.Render(writer);
}
}
}
许多属性需要在ViewState中处理,但在这种情况下,我认为我们很好 在服务器页面中创建按钮:
var button1 = new Button();
button1.ServerClick += new EventHandler(button1_ServerClick);
button1.OnClientClick = SetJsForSaveBtn();
button1.Attributes.Add("UseSubmitBehavior", "false");
panel.Controls.Add(button1 );
//包含服务器代码
private void saveBtn_ServerClick(object sender, EventArgs e)
{
//do something if ClientClick returns true
}
//包含页面的JS代码
LiteralControl js = new LiteralControl();
panel.Controls.Add(js);
js.Text =@"<script type='text/javascript'>
$(document).ready(function(){
function CheckValidationOnClient(){
if(!ValidatePage()){
return false;
}
else{
return true;
}
};
});
</script> ";
private string SetJsForSaveBtn()
{
var jsfunc = @" return CheckValidationOnClient()";
return jsfunc ;
}
LiteralControl js=new LiteralControl();
panel.Controls.Add(js);
js.Text=@”
$(文档).ready(函数(){
函数CheckValidationOnClient(){
如果(!ValidatePage()){
返回false;
}
否则{
返回true;
}
};
});
";
私有字符串SetJsForSaveBtn()
{
var jsfunc=@“返回CheckValidationOnClient()”;
返回jsfunc;
}
@oshirowanen我真的记不清你为什么要在OnClientClick
中显式地输入return false
。如果我还记得的话,这与ASP.NET在呈现实际HTML和Javascript时在OnClientClick
中围绕您的代码所做的封装有关。您的更新代码工作正常。您可以通过创建新的aspx(不带母版页)来测试它。这可能与您现有的javascript代码干扰mycheck函数有关。哈哈!是的,我的OnClientClick
缺少返回部分。谢谢你,谢谢你!这并不完全准确。返回false只是防止回发。onclick方法仍然在服务器端激发,但是其效果不会更新到屏幕上。如果您使用它来阻止(比如)数据库更新,请小心,因为事件仍然会触发。@JSON如果客户端不与服务器通信,服务器如何自行触发click事件。请注意,Http是无状态的。除非你使用完全不可能的Signal-R,否则你提到的是不可能的。如果您有问题,请创建一个;我很乐意帮助您。@Win可能这取决于您使用的服务器类型。事实上,我知道IIS是这样的。我现在正在使用它,如果可以的话,我会向你证明。
var button1 = new Button();
button1.ServerClick += new EventHandler(button1_ServerClick);
button1.OnClientClick = SetJsForSaveBtn();
button1.Attributes.Add("UseSubmitBehavior", "false");
panel.Controls.Add(button1 );
private void saveBtn_ServerClick(object sender, EventArgs e)
{
//do something if ClientClick returns true
}
LiteralControl js = new LiteralControl();
panel.Controls.Add(js);
js.Text =@"<script type='text/javascript'>
$(document).ready(function(){
function CheckValidationOnClient(){
if(!ValidatePage()){
return false;
}
else{
return true;
}
};
});
</script> ";
private string SetJsForSaveBtn()
{
var jsfunc = @" return CheckValidationOnClient()";
return jsfunc ;
}