2009-01-11 79 views
0

我使用生成服務器端的JavaScript驗證郵政編碼,並在單擊LinkBut​​ton時注入。然後,我通過在頁面加載時調用服務器端函數來檢索返回值。Asp.Net ViewState與RegisterClientScriptBlock丟失

這很好用,但問題在於回傳後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

等待。因此,您正在做一個回發的LinkBut​​ton的OnClick動態生成JavaScript,做另一個PostBack? – 2009-01-11 04:24:59

回答

0

爲什麼不直接使用OnClick事件LinkButton的?或者,更好的是,查看CustomValidator控件,因爲它看起來像所有你想要做的是驗證一個郵政編碼,這正是CustomValidator可以做的(你需要看看ClientValidationFunction,這是你的位置想要把你的正則表達式測試)。