首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自定义ValidationSummary模板Asp.net MVC 3

自定义ValidationSummary模板Asp.net MVC 3
EN

Stack Overflow用户
提问于 2011-05-02 21:40:00
回答 6查看 52.6K关注 0票数 68

我正在与Asp.Net MVC3合作一个项目

在视图中,我有@Html.ValidationSummary(true),通常它会生成

代码语言:javascript
复制
<div class="validation-summary-errors">
    <ul>
        <li>Something bad Happened!</li>
    </ul>
</div>

如何将此ValidationSummary扩展到MyValidationSummary并生成类似以下内容的Html Code模板:

代码语言:javascript
复制
<div class="notification warning"> 
    <span></span> 
    <div class="text"> <p>Something bad Happened!</p> </div> 
</div>
EN

回答 6

Stack Overflow用户

发布于 2011-12-16 20:43:43

我的方法是使用自定义的ValidationSummary.cshtml

代码语言:javascript
复制
@model ModelStateDictionary

@if(!Model.IsValid)
{
    <div class="validation-summary-errors">
        <ul>
            @foreach (var modelError in 
                     Model.SelectMany(keyValuePair => keyValuePair.Value.Errors))
            {
                <li>@modelError.ErrorMessage</li>
            }
        </ul>
    </div>
}

将此部分视图放在您的共享文件夹中,并从代码中引用它:

代码语言:javascript
复制
@Html.Partial("_ValidationSummary", ViewData.ModelState);

这样你就可以完全控制你的html了。

票数 144
EN

Stack Overflow用户

发布于 2013-08-30 07:15:35

flos's answer的基础上,我使其与微软的jQuery非侵入性验证兼容,并添加了Bootstrap的3个面板样式。这是新的代码:

代码语言:javascript
复制
@model ModelStateDictionary

<div class="@(Html.ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors") panel panel-danger"
     data-valmsg-summary="true">
    <div class="panel-heading">
        Please, correct the following errors:
    </div>
    <div class="panel-body">
        <ul>
            @foreach(var modelError in Model.SelectMany(keyValuePair => keyValuePair.Value.Errors))
            {
                <li>@modelError.ErrorMessage</li>
            }
        </ul>
    </div>
</div>

你可以在这里阅读它的全部细节:

Creating a custom ASP.NET MVC @Html.ValidationSummary styled with Bootstrap 3 panel

我还创建了一个样例ASP.NET MVC项目来实际展示这个自定义的ValidationSummary。在这里获取它:

https://github.com/leniel/AspNetMvcCustomHtmlValidationSummary

票数 26
EN

Stack Overflow用户

发布于 2014-03-12 20:51:46

我只是在这里发布我的答案,因为它对我来说效果很好;)

我使用了一个简单的扩展方法,它接受一个MvcHtmlString并将其解码回HTML:

代码语言:javascript
复制
    public static MvcHtmlString ToMvcHtmlString(this MvcHtmlString htmlString)
    {
        if (htmlString != null)
        {
            return new MvcHtmlString(HttpUtility.HtmlDecode(htmlString.ToString()));
        }
        return null;
    }

为了深入了解这一点,我将验证摘要帮助程序添加到我的chstml中,如下所示:

代码语言:javascript
复制
@Html.ValidationSummary(true).ToMvcHtmlString()

这意味着,我可以将自定义HTML添加到我的验证摘要中:

代码语言:javascript
复制
ModelState.AddModelError("", "<p>This message can have html in it</p>");

我甚至可以在我的字段验证消息中添加自定义HTML:

代码语言:javascript
复制
ModelState.AddModelError("MyField", "<p>This message can have html in it</p>");

要让我的字段验证消息与HTML一起工作:

代码语言:javascript
复制
@Html.ValidationMessageFor(model => model.MyField).ToMvcHtmlString();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5857851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档