没有ValidationSummary的模型验证?

时间:2011-10-18 20:57:20

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

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

示例...

public class LoginModel
{
  [Required]
  public string Email { get;set; }
}

in my HTML, I have
<input type="text" value="" name="Email">

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

我希望我能做到

<div class="validation-summary-errors"></div>

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

想法?

1 个答案:

答案 0 :(得分:1)

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

修改

似乎你想把消息注入Div。除非你在路径提供程序中运行一些魔法,否则这不会自动发生。在视图中使用您自己的帮助器方法以避免黑客攻击或仅使用默认提供的方法。如果你真的想要在你的控制台中渲染你的视图并搜索要替换的Div模式。 custom ValidationForMessage helper removing css element

注意达林的方法

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

无法访问控制器中的ViewContext,您只能为View查看html。但是,在您的视图中的某个位置,您需要(据我所知)帮助方法将错误集合粘贴到ViewData中。

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