【问题标题】:Model Validation without the ValidationSummary?没有 ValidationSummary 的模型验证?
【发布时间】:2011-12-10 10:44:50
【问题描述】:

我的登录操作有一个 LoginModel,但我只想使用 HTML。

示例...

公共类登录模型 { [必需的] 公共字符串电子邮件 { 获取;设置; } } 在我的 HTML 中,我有

这是因为我要将我的 HTML 存储在我的数据库中,我遇到的问题是,如何在不使用 Html.ValidationSummary() 的情况下进行模型验证?

我希望我能做到

因为这是 HTML 中的内容,但不起作用..

想法?

【问题讨论】:

  • 您希望 MVC 从您的 DB 中解析 HTML,找到验证容器并将消息放入其中?这不会发生。
  • 相反,您可以将 Razor 视图存储在您的数据库中,并注意巨大的安全风险。
  • @SLaks 你的意思是像 Sharepoint :)

标签: html asp.net-mvc-3 model-view-controller validation model-validation


【解决方案1】:

无论您将 HTML 存储在何处,验证都是在客户端完成的。关于如何使用虚拟路径提供程序将您的视图存储在其他地方(DB)的各种帖子,然后验证应该仍然可以正常工作。我想我错过了为什么它不适合你,所以我不得不想象你没有使用路径提供程序来查找你的视图。

编辑

您似乎想将消息注入 Div。除非您在路径提供程序中使用一些魔法,否则这不会自动发生。在视图中使用您自己的辅助方法以避免黑客攻击,或者只使用默认提供的方法。如果您真的想这样做,请在您的控件中呈现您的视图并搜索要替换的 Div 模式。 custom ValidationForMessage helper removing css element

注意达林的方法

var 表达式 = ExpressionHelper.GetExpressionText(ex); var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(表达式); var modelState = htmlHelper.ViewData.ModelState[modelName];

无法访问控制器中的 ViewContext,您只能为您的视图呈现 html。但是,在您的视图中,您需要(据我所知)一个辅助方法将您的错误集合粘贴到 ViewData 中。

您的虚拟路径提供程序可能必须将此辅助方法注入到您的视图文本中,以便 Razor 解析。实际上 - 呃。 这可能会容易得多。 您的提供商可能只需从数据库中读取您的 html,找到 div,然后将 @Html.ValidationSummary 注入该 div。我相信这会奏效。为什么不把验证摘要放在那里,但如果它最终还是会出现(基本上)

【讨论】:

  • 否;他希望服务器将错误消息注入他的<div>
  • 啊。当然他可以用他自己的辅助方法来做到这一点。
  • 否;他需要将其注入现有的字符串中。他不需要不同的输出。阅读我关于这个问题的 cmets。
  • 我明白 - 我提到了两种方法。阅读我的cmets。我会进一步澄清。只能在手机上做这么多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多