asp.net
  • validation
  • internet-explorer-8
  • 2010-02-05 39 views 1 likes 
    1

    我有一個asp:FormView控件(在ascx文件中),它被加載到一個門戶頁面以及一些其他控件。asp.net驗證控件在javascript中導致「隨機」錯誤

    我需要爲表單添加驗證,但是當我添加任何驗證控件時,我會在加載頁面時在生成的JavaScript中出現明顯的隨機錯誤,並且驗證在我需要時無法觸發。

    這是我已經得到了代碼:

    <asp:TextBox ID="FPITextBox4" runat="server" Text='<%# Bind("SomeNumber") %>'></asp:TextBox> 
    <asp:RangeValidator ID="RangeValidator4" runat="server" ControlToValidate="FPITextBox4" Text="*" 
        ErrorMessage="The number must be a whole number between 0 and 100,000" Type="Integer" 
        MaximumValue="100000" MinimumValue="0" ToolTip="Must be between 0 and 100,000"></asp:RangeValidator> 
    

    這是當頁面加載我得到的錯誤:

    Message: Expected ';' 
    Line: 1159 
    Char: 60 
    Code: 0 
    

    當我看行1159在生成的代碼它看起來像這樣:

    var ctl00_ctl00_main_col2_control_0_widgetcontrolX_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_widgetcontrol_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_FormView1_RangeValidator4 = document.all ? 
    document.all["ctl00_ctl00_main_col2_control_0_widgetcontrolX_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_widgetcontrol_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_FormView1_RangeValidator4"] : 
    document.getElementById("ctl00_ctl00_main_col2_control_0_widgetcontrolX_3eba4918-7c7d- 
    47aa-a089-fd0ead0609fe_widgetcontrol_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_FormView1_RangeValidator4"); 
    

    立即上面這個代碼是:

    <script type="text/javascript"> 
    //<![CDATA[ 
    var Page_Validators = new Array(document.getElementById(
    "ctl00_ctl00_main_col2_control_0_widgetcontrolX_3eba4918-7c7d 
    -47aa-a089-fd0ead0609fe_widgetcontrol_3eba4918-7c7d-47aa-a089- 
    fd0ead0609fe_FormView1_RangeValidator4")); 
    //]]> 
    </script> 
    

    當控件僅僅通過自身實例化到測試頁面時,相同的代碼工作。

    看來,錯誤只發生在IE 8中。我已經測試了Firefox 3.6中的相同頁面,並且它的所有功能都按預期工作。

    修正

    看來,驗證工作。我有一個ValidationSummary控制集來顯示一個消息框,並沒有出現這導致我相信驗證沒有發射。當我將其更改爲ShowSummary="true" ShowMessageBox="false"時,錯誤消息確實出現並且數據未保存。

    因此,現在意味着我有一個隨機腳本錯誤(目前)似乎不會影響頁面的工作。

    但是,我仍然想刪除錯誤 - 以防萬一它隱藏了其他內容。

    +0

    指定的行似乎沒問題。你使用的是Internet Explorer嗎? IE有時會給出錯誤的行號。您可以嘗試使用Microsofts腳本編輯器進行調試:http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html – Pbirkoff 2010-02-05 13:21:38

    +0

    由於錯誤消息指示javascript行未終止,因此我首先將嘗試從100,000刪除逗號。 – 2010-02-05 13:24:00

    +0

    @Pbirkoff - 我正在使用IE瀏覽器,但是如果我添加並刪除其他驗證元素,行號會根據添加/刪除的代碼進行移動。我會嘗試Firefox。 – ChrisF 2010-02-05 13:24:44

    回答

    3

    你真的找到了.Net客戶端生成代碼中的錯誤 - 看看 http://haacked.com/archive/2006/07/14/ASP.NET2.0ClientValidationJavascriptBug.aspx

    但是,沒有從M $的分辨率 - 你必須以不同的方式來生成的ID ...

    +0

    有趣的鏈接。我認爲我沒有任何帶有「。」的控制ID,但我會仔細檢查。 – ChrisF 2010-03-04 09:33:10

    +0

    剛剛選中,沒有「。」,但生成的名稱長度爲160個字符。也許這就是問題所在。需要更多的調查。 – ChrisF 2010-03-04 09:38:45

    +2

    是的,你確實有一個禁止使用的字符:「 - 」。 看看Control.ID注意http://msdn.microsoft.com/en-us/library/system.web.ui.control.id.aspx 使用guid.ToString(「n」)如果這是唯一的問題。 彼得伊凡 – 2010-03-05 09:18:20

    0

    我發現這種類型的錯誤是由於我的一個腳本中有錯誤而導致的。你的頁面中是否有JS代碼,並且都是正確的,沒有丟失的分號?

    HTH。

    +0

    這是我的第一個想法,但我所做的唯一更改是將''添加到aspx中。我沒有在頁面中添加任何新的JavaScript,這真是令我困惑。 – ChrisF 2010-02-05 14:20:33

    相關問題