c# - 通过辅助方法动态调用 Html.ValidationSummary() 时出现 KeyNotFound 异常

标签 c# javascript asp.net-mvc keynotfoundexception

我的 View 中有一个帮助程序方法,它动态地呈现整个表单。现在我想添加对 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 键) 在 System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, bool 值 excludePropertyErrors,字符串消息,IDictionary2 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:line 88 在 Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateForm() 在 D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:line 70 在 Fusion.UI.MvcWebUX.Helper.FormGenerator.RenderForm(ViewPage viewPage) 在 D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:line 60 在 ASP.views_shared_autoview_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) 在 d:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\AutoView.aspx:line 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:line 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( bool 值 includeStagesBeforeAsyncPoint, bool 值 includeStagesAfterAsyncPoint) 内部异常:

我为此苦苦挣扎了几个小时。谁能帮我解决这个问题并告诉我为什么会这样。

最佳答案

我已经来这里两次寻求解决方案,所以我也会回答另一个可能导致此问题的问题。

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

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

关于c# - 通过辅助方法动态调用 Html.ValidationSummary() 时出现 KeyNotFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182830/

相关文章:

C# MVC 5 Razor 分页列表 : Selecting and displaying a specific page

javascript - 如何在 Razor View 中更新 JavaScript 中的模型值?

c# - 我应该将 C# 的 using 语句用于哪些类?

javascript - 我不明白这段 JS 代码是如何工作的;这两行是如何返回的?

javascript - 使用 jquery 按样式选择元素

javascript - 如何在 Javascript 中使用 AM/PM 创建时间正则表达式

c# - 用于测试调用异步方法的 ICommand 的模式

c# - 如何确保 [BsonId] 字段的命名类似于数据库中的属性名称而不是 `_id`

c# - 将 WPF 应用程序添加到 Windows 任务栏

javascript - 我可以在 asp.net-mvc 3 中的 @Ajax.Actionlink 中传递 Javascript 变量吗?