Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 当onclientclick为false时停止onclick激发?_Asp.net_Vb.net_Asp.net 3.5_Onclientclick - Fatal编程技术网

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 ;
}