我继承了一个系统,我现在正试图通过添加验证来改变它。
我试图将验证方法放在客户端点击上,并根据它是否失败,将viewstate更改为下一页。
但是,当ClientClick返回true时,不会调用OnClick方法。
这是aspx按钮;
<asp:Button ID="btnSaveMile" UseSubmitBehavior="false" OnClick="btnSaveMile_OnClick" OnClientClick="return milestoneDateValidation()" Width="149" CssClass="button"
runat="server" Text="Save For Later" />
Chrome如何渲染;
<input type="button" name="btnSaveMile" value="Save Edit" onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','')" id="btnSaveMile" class="button ui-button ui-widget ui-state-default ui-corner-all" style="width:149px;" role="button" aria-disabled="false">
用于检查日期的验证(简化)按时间顺序排列;
function milestoneDateValidation() {
var dateFields = new Array();
var flag = true;
var date1;
var date2;
dateFields = $("#completedDateStage1, #completedDateStage2, #completedDateStage3, #completedDateStage4, #completedDateStage5").filter(function() {
return this.value.length !== 0;
})
var length = dateFields.length;
if (length > 1) {
for (var i = 1; i < length; i++) {
date1 = Date.parse(dateFields[i].value.replace(new RegExp("-", "gm"), " "));
date2 = Date.parse(dateFields[i - 1].value.replace(new RegExp("-", "gm"), " "));
if (date1 < date2) {
flag = false;
break;
}
}
}
return flag;
}
按钮点击方法;
public void btnSaveMile_OnClick(object sender, EventArgs e)
{
SaveMileStones(false);
Response.Redirect("Default.aspx?ID=" + strCID);
}
我对Web应用程序还不熟悉,但除了在回发时没有调用btnSaveMile_OnClick之外,我无法发现任何明显的错误。
查看其他帖子,我注意到OnClick按钮呈现为;
onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','OnClick')"
然而我的正在呈现为;
onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','')"
这是微不足道的,还是这个问题?如果是这样,为什么它是空白的,或者我应该如何纠正它?
我在这里看了很多关于SO的文章,并尝试了很多解决方案,但是没有一个能够解决这个问题,所以我准备好开始拉头了。有没有人有任何想法?
答案 0 :(得分:0)
正如您所见,当您的函数返回true或false时,它不会回发。修改OnClientClick逻辑,如下所示:
OnClientClick="if (!milestoneDateValidation()) {return false;}"
因此,只有在验证结果为false时才返回false。否则,它只是回发。