KeyNotFound Исключение при динамическом вызове Html.ValidationSummary () через вспомогательный метод - PullRequest
2 голосов
/ 02 февраля 2010

У меня есть вспомогательный метод в моем представлении, который динамически отображает всю форму. Теперь я хочу добавить поддержку проверки клиентов, доступную в Asp.Net MVC RC 2.

Ниже приведен код, который я использую для отображения поля Сводка проверки в форме.

_viewPage.Html.EnableClientValidation();
        MvcHtmlString validationSummary = _viewPage.Html.ValidationSummary("There are errors on this form. Please contact your administrator.");
        if (validationSummary != null && validationSummary.ToString() != "")
            Response.Write(validationSummary.ToString());

Когда код достигает этой точки, я получаю следующую ошибку.

System.Collections.Generic.KeyNotFoundException was unhandled by user code

Message = "Указанный ключ отсутствует в словаре." Источник = «Система» Трассировки стека: в System.ThrowHelper.ThrowKeyNotFoundException () в System.Collections.Generic.SortedDictionary 2.get_Item(TKey key) at System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, Boolean excludePropertyErrors, String message, IDictionary 2 htmlAttributes) в System.Web.Mvc.Html.ValidationExtensions.ValidationSummary (HtmlHelper htmlHelper, Строковое сообщение, IDictionary`2 htmlAttributes) в Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateFormValidation () в D: \ EBS \ Project.Fusion \ Fusion.UI.MvcWebUX \ Helper \ FormGenerator.cs: строка 88 в Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateForm () в D: \ EBS \ Project.Fusion \ Fusion.UI.MvcWebUX \ Helper \ FormGenerator.cs: строка 70 в Fusion.UI.MvcWebUX.Helper.FormGenerator.RenderForm (ViewPage viewPage) в D: \ EBS \ Project.Fusion \ Fusion.UI.MvcWebUX \ Helper \ FormGenerator.cs: строка 60 в ASP.views_shared_autoview_aspx .__ RenderContent2 (HtmlTextWriter __w, Control parameterContainer) в каталоге d: \ EBS \ Project.Fusion \ Fusion.UI.MvcWebUX \ Views \ Shared \ AutoView.aspx: строка 7 в System.Web.UI.Control.RenderChildrenInternal (автор HtmlTextWriter, дети ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.Control.Render (писатель HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (писатель HtmlTextWriter) в ASP.views_shared_fusion_master .__ Render__control1 (HtmlTextWriter __w, Control parameterContainer) в d: \ EBS \ Project.Fusion \ Fusion.UI.MvcWebUX \ Views \ Shared \ Fusion.Master: строка 74 в System.Web.UI.Control.RenderChildrenInternal (автор HtmlTextWriter, дети ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.Control.Render (писатель HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (писатель HtmlTextWriter) в System.Web.UI.Control.RenderChildrenInternal (автор HtmlTextWriter, дети ICollection) в System.Web.UI.Control.RenderChildren (писатель HtmlTextWriter) в System.Web.UI.Page.Render (писатель HtmlTextWriter) в System.Web.Mvc.ViewPage.Render (писатель HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (средство записи HtmlTextWriter, адаптер ControlAdapter) в System.Web.UI.Control.RenderControl (писатель HtmlTextWriter) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:

Я боролся с этим в течение нескольких часов. Может ли кто-нибудь помочь мне решить ее и сказать, почему это происходит.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

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

В MVC2 RC (я полагаю; версия, поставляемая с 2010 RC), вы можетевызывать это исключение при вызове EnableClientValidation:

<%-- This is the proper way to call these two methods --%>
<% Html.ValidationSummary(); %>
<% Html.EnableClientValidation(); %>

Этот способ вызовет исключение:

<%-- Side effects of calling ECV first will result in the exception --%>
<% Html.EnableClientValidation(); %>
<% Html.ValidationSummary(); %>

Довольно дрянно, что побочные эффекты возникают из-за нескольких отключенных вызовов методов, подобных этой,В некотором роде напоминает мне о глобальных переменных.

0 голосов
/ 04 февраля 2010

Я нашел проблему с этим. Я установил EnableClientValidation после написания BeginForm. Просто напишите _viewPage.Html.EnableClientValidation (); прежде чем что-либо на форме и ошибка была решена. Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...