【问题标题】:Stop Postback if Validation Error如果验证错误停止回发
【发布时间】:2012-08-09 12:24:59
【问题描述】:

我有以下文本框控件;

   <asp:TextBox ID="txtAmount" runat="server" AutoPostBack="true" Width="85px" class="validate[ERExpenseTypeDaterequired,custom[float]]"
                                OnTextChanged="txtAmount_TextChanged"   ></asp:TextBox>

这里,如果文本框中的值有任何变化,txtAmount_TextChanged会被调用,因为AutoPostBack="true"在控件中。

因此,如果我们在文本框中输入一个非数值,则使用 Jquery 的属性 Class 会触发验证错误,但是这个从文本框中弹出为红色框的错误不会停留超过 3 秒,它会消失页面在 3 秒内回帖,回帖只是因为有一个AutopostBack="true"

我不能做Autopostback="false" 因为,我需要根据这个文本框值的变化当场做一些计算。

如果我这样做Autopostback="false",页面将不会回发并且错误消息永远保留,但我无法对“txtAmount_TextChanged”事件进行任何计算,因为如果Autopostback="false",则永远不会在 textchcange 上调用此事件。

那么,如果这个文本框中有任何验证错误,我该怎么做才能防止这种回发?

【问题讨论】:

  • 使用java script 计算文本框
  • 您的问题类似于以下问题 [1]:stackoverflow.com/questions/1524492/…
  • 不,在我的情况下没有必填字段验证器
  • Krunal .. 我们可以以最低的优先级做到这一点...如果没有其他办法
  • stackoverflow.com/questions/1524492/… 上查看 Naveen 的回答 ... 基本上为文本框添加 CausesValidation="true",在那里进行更好的解释。

标签: c# javascript jquery .net validation


【解决方案1】:
function txtAmount_TextChanged(){
    //do validations here, Eg: validate if txtAmount is valid amount and "> 0"
   return false; //if somethings's wrong, else true

}

【讨论】:

  • 我需要在哪里放置/调用上述函数? HTML 还是背后的代码?
  • @PeteEngineer:在您的 aspx 页面或链接的 js 文件中的相关 script 标记中&lt;script scr="hello.js".. /&gt;
  • txtAmount_TextChanged 是我在代码隐藏中编写的服务器端函数...你是说我需要用同名编写客户端函数吗?
  • @PeteEngineer:是的,需要有一些客户端功能。选择您喜欢的任何名称。
【解决方案2】:

您需要添加一个客户端事件处理程序,并在您不希望 PostBack 发生时从中返回 false。

<asp:TextBox onkeydown="return doMyCheck()" ID="txtAmount" runat="server"
  AutoPostBack="true" Width="85px" class="validate[ERExpenseTypeDaterequired,custom[float]]"
  OnTextChanged="txtAmount_TextChanged"></asp:TextBox>

JavaScript:

function doMyCheck() {
  if (// call your jQuery validity check) 
    return false;
}

【讨论】:

  • 哎呀你没看到......我在你的答案中更新了现在它不可见
  • Microsoft JScript 运行时错误:预期对象...这是错误
  • 这来自以下行:
    onchange="javascript:setTimeout('__doPostBack(\'ctl00$PlaceHolderMain$SPWebPartManager$g_812dd644_c15e_4f29_b484_62dee31b34ee$ctl00$ReportExpenseControl$gdvReportExpense$ctl02$txtAmount\',\'\')', 0)"
  • 您是否在 JavaScript 中添加了function doMyCheck()(即在&lt;script&gt; 标签之间?
【解决方案3】:

使用Input事件来检查使用jquery在Textbox中添加的文本

jQuery('#txtAmount').live('input', function() 
   {
     // do your Validation 
     // If Valid return True
     // If Invalid Return False
   }
) 

【讨论】:

    【解决方案4】:

    你可以使用jquery改变功能

    $('#txtbox').change(function() { if(validationfail){return false;} );
    


    您也可以使用 keychange 事件

     $('#txtbox').keyup(function() { 
           if(validationfail){return false;} 
        });
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签