0

IE8のJavaScriptのこの行でエラーが発生します。ValidationSummaryがコメントアウトされている場合は発生しません。これは、コントロールによって生成されるコードだと思います。

ValidationSummaryは、asp.netのコンテンツページで使用されるUserControlにあります。

IE開発者ツールを使用すると、このコードが強調表示されます

document.getElementById('ctl00_ctl00_body_pageBody_ucCC1_valSummary').dispose = function() {
    Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_ctl00_body_pageBody_ucCC1_valSummary'));
}
(function() {var fn = function() {Sys.Extended.UI.ModalPopupBehavior.invokeViaServer('ctl00_ctl00_body_pageBody_mdlPopupExtender', true); Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);})()




<asp:ValidationSummary 
runat="server" 
ID="valSummary" 
ShowSummary="true" 
DisplayMode="BulletList"
CssClass="summaryValidation" 
HeaderText="Errors:" 
ForeColor="White" 
ValidationGroup="VldGrpHospital" />
4

5 に答える 5

1

これはajaxコントロールツールキットの既知のバグであることが判明しました。最新のリリースで修正されたとのことですが、修正されていないと思います。修正は、検証の概要を継承し、2つのjavascriptステートメントの間に1つの欠落しているセミコロンを挿入するサーバーコントロールを作成することです。

http://ajaxcontroltoolkit.codeplex.com/workitem/27024

[ToolboxData("")]
public class AjaxValidationSummary : ValidationSummary
{
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), this.ClientID, ";", true);
    }
}
于 2012-02-14T22:13:09.733 に答える
1

受け入れられた答えは、機能するかもしれませんが、出力順序と一致するスクリプトブロック登録順序に依存しているため、最善の解決策ではない可能性があります。これは、信頼するのに適していません。次のMSDNページからRegisterStartupScript

RegisterStartupScriptを使用して登録されたスタートアップスクリプトブロックは、登録された順序と同じ順序で出力されるとは限りません。起動スクリプトブロックの順序が重要な場合は、StringBuilderオブジェクトを使用してスクリプトブロックを1つの文字列にまとめ、それらすべてを1つの起動スクリプトとして登録します。

これがおそらくより良い修正です:

public class ValidationSummarySansBug : ValidationSummary
{
    // The bug is that the base class OnPreRender renders some javascript without a semicolon.
    // This solution registers an almost-identical script *with* a semicolon using the same type and key and relies on the
    // behavior of ClientScriptManager.RegisterStartupScript to ignore duplicate script registrations for the same type/key
    protected override void OnPreRender(EventArgs e)
    {
        if (Enabled)
        {
            ScriptManager.RegisterStartupScript(
                this,
                typeof(ValidationSummary), // this type must match the base type's specified type for the script we're fixing
                ClientID + "_DisposeScript", // this key must match the base type key for the script we're fixing
                @"
document.getElementById('{0}').dispose = function() {{
    Array.remove(Page_ValidationSummaries, document.getElementById('{0}'));
}};
            ".FormatInvariant(ClientID),
                true);
        }

        base.OnPreRender(e);
    }
}
于 2015-01-19T19:31:25.930 に答える
0

このバグはASP.NETの検証コントロールの一部であり、AJAXToolkitではありません。ページ上のすべての検証コントロールからクライアント側の検証をオフにすることができEnableClientScript="false"、エラーはなくなります。

于 2012-04-03T04:50:33.410 に答える
0

Windows 7でも同じ問題が発生しました。この問題の原因は、Windowsの最新の更新プログラムではないことです(おそらく.NETは古くなっていました)。(私は自動的に更新をオフにしました)。アップデートをインストールした後、問題は解決しました

于 2014-03-12T13:16:58.680 に答える
0

同じ問題がありましたが、完全に異なる理由で、次のコードがありました。

<% if(showvalidators){ %>
<tr>
    <td>
    <asp:ValidationSummary ID="SummaryValidator" runat="server" ForeColor="Red" EnableClientScript="true" DisplayMode="BulletList" ShowMessageBox="false" HeaderText="" />
    </td>
</tr>
<%}%>

showvalidatorがfalseの場合、ValidationSummaryControlサーバーサイドを明示的に無効にする必要がありました。Javascriptvalidationcodeはsummarycontrol(getelementbyid)を見つけようとしますが、ページにレンダリングされませんでした。Enableclientsidescript = "false"は、不足しているコントロールを検索するjavascriptcodeがなくなるため、これを修正します。この動作は、ValidationSummaryControlの.NET 4.5で対処されたと思われるため、問題は.NET4.0でのみ発生します。

于 2014-04-28T14:26:32.703 に答える