ValidationSummary javascript error - PullRequest
       23

ValidationSummary javascript error

0 голосов
/ 13 февраля 2012

Я получаю сообщение об ошибке в этой строке JavaScript в IE8.Это не происходит, когда ValidationSummary закомментирован.Я считаю, что это код, который генерируется элементом управления.

ValidationSummary находится на UserControl, который используется на странице содержимого в asp.net.

Когда я использую инструменты разработчика 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" />

Ответы [ 5 ]

1 голос
/ 19 января 2015

Принятый ответ, хотя и может работать, может быть не самым лучшим решением, так как он основан на порядке регистрации блоков скриптов, совпадающем с порядком вывода, на который нельзя полагаться.На странице MSDN для RegisterStartupScript:

Блоки сценариев запуска, зарегистрированные с помощью RegisterStartupScript, не гарантированно выводятся в том же порядке, в котором они зарегистрированы.Если важен порядок блоков сценариев запуска, используйте объект StringBuilder, чтобы собрать блоки сценариев в одну строку, а затем зарегистрируйте их все как один сценарий запуска.

Здесь возможнолучше исправить:

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);
    }
}
1 голос
/ 15 февраля 2012

Оказывается, это известная ошибка в наборе инструментов управления ajax.Они утверждают, что это было исправлено в последней версии, но я не думаю, что это так.Исправление заключается в создании серверного элемента управления, который наследуется от сводки проверки и вставляет одну пропущенную точку с запятой между двумя операторами javascript.

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);
    }
}
0 голосов
/ 28 апреля 2014

Была та же проблема, но по совершенно другой причине, имел этот код:

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

Мне пришлось явно отключить серверную часть ValidationSummaryControl, если showvalidator был ложным. Javascriptvalidationcode пытается найти summarycontrol (getelementbyid), но он не был отображен на странице. Enableclientsidescript = "false" исправляет это, потому что никакой javascriptcode больше не ищет отсутствующий элемент управления. Я полагаю, что это поведение было обращено в .NET 4.5 для ValidationSummaryControl, поэтому проблема возникает только в .NET 4.0

0 голосов
/ 12 марта 2014

У меня была такая же проблема на Windows 7. Причиной этой проблемы были не текущие обновления Windows (возможно, .NET устарела).(Я отключил автоматическое обновление).После установки обновлений проблема была решена

0 голосов
/ 03 апреля 2012

Эта ошибка является частью элементов управления Validation в ASP.NET, а не AJAX Toolkit.Вы можете отключить проверку на стороне клиента из всех элементов управления проверки на вашей странице с помощью EnableClientScript="false", и ошибки исчезнут.

...