我的 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,字符串消息,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: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/