我正在使用服务器端生成的Javascript验证邮政编码,并在点击LinkButton时注入。然后,我通过在页面加载时调用服务器端函数来检索返回值。
这很好用,但问题是在PostBack之后ViewState完全丢失了。下面是代码,从page_load事件,按钮单击事件开始,然后是从page_load事件调用的回调。
有没有办法可以以某种方式保存ViewState,可能很容易在会话变量中?或者我有可以使用的解决方法吗?
// In Page_Load
if (Request.Form["__EVENTTARGET"] == "CallFunction") {
GetValidateZipCodeScriptReturnValue(Boolean.Parse(Request.Form["__EVENTARGUMENT"].ToString()));
}
// OnClick for LinkButton
private bool ValidateZipCode(string zip) {
StringBuilder script = new StringBuilder();
script.Append("<script language='javascript' type='text/javascript'>");
script.Append(@"var regex = /^\d{5}$|^\d{5}-\d{4}$/;");
script.Append("__doPostBack('CallFunction', regex.test(" + zip + "));");
script.Append("</script>");
Type t = GetType();
if (!ClientScript.IsClientScriptBlockRegistered(t, "ValidateZipCodeScript")) {
ClientScript.RegisterClientScriptBlock(t, "ValidateZipCodeScript", script.ToString());
}
return false;
}
// Method called on PostBack to get the return value of the javascript
private void GetValidateZipCodeScriptReturnValue(bool valid) {
m_ZipCode = uxZip.Text;
if (valid) {
Response.Redirect(string.Format("~/checkout/overview.aspx?pc={0}&zc={1}",
ProductCode, ZipCode));
}
else {
Alert.Show("The entered zip code is invalid. Please ensure the zip code is a valid zip code.");
SetupPostBackViewState();
ScrollToZipCode();
}
}
答案 0 :(得分:0)
为什么不直接使用OnClick
的{{1}}事件?或者,更好的是,查看CustomValidator
控件,因为看起来你要做的就是验证邮政编码,这正是LinkButton
可以做的(你需要看一下)在ClientValidationFunction
,这是你想要进行正则表达式测试的地方。)