【问题标题】:KeyNotFound Exception when calling Html.ValidationSummary() dynamically through helper method通过辅助方法动态调用 Html.ValidationSummary() 时出现 KeyNotFound 异常
【发布时间】:2010-02-02 08:59:58
【问题描述】:

我的视图中有一个辅助方法,它可以动态呈现整个表单。现在我想添加对 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.SortedDictionary2.get_Item(TKey key) at System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, Boolean excludePropertyErrors, String message, IDictionary2 htmlAttributes) 在 System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper,字符串消息,IDictionary`2 htmlAttributes) 在 D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:line 88 中的 Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateFormValidation() 在 D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:line 70 中的 Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateForm() 在 D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:line 60 中的 Fusion.UI.MvcWebUX.Helper.FormGenerator.RenderForm(ViewPage viewPage) 在 d:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\AutoView.aspx:line 7 中的 ASP.views_shared_autoview_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) 在 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 编写器) 在 d:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\Fusion.Master:line 74 中的 ASP.views_shared_fusion_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) 在 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(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint) 内部异常:

我已经为此苦苦挣扎了几个小时。谁能帮我解决它并告诉我为什么会发生这种情况。

【问题讨论】:

  • 我发现了它的问题。在编写 BeginForm 之后,我一直在设置 EnableClientValidation。只需写 _viewPage.Html.EnableClientValidation();在表单上的任何内容之前,错误已解决。谢谢,

标签: c# javascript asp.net-mvc keynotfoundexception


【解决方案1】:

我来这里两次是为了解决问题,所以我也会回答可能导致此问题的另一件事。

在 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(); %>

从像这样的几个断开连接的方法调用中突然出现副作用是非常糟糕的。有点让我想起全局变量。

【讨论】:

  • 或者如果您在母版页中启用客户端验证,&lt;% Html.EnableClientValidation(); %&gt;&lt;asp:ContentPlaceHolder ID="MainContent" runat="server"&gt;&lt;/asp:ContentPlaceHolder&gt; 之后
【解决方案2】:

我发现了它的问题。在编写 BeginForm 之后,我一直在设置 EnableClientValidation。只需写 _viewPage.Html.EnableClientValidation();在表单上的任何内容之前,错误已解决。谢谢,

【讨论】:

  • 然而,这并不是适合所有人的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多