MVC(Razor)助手类(ValidationImage)无法渲染/工作?

时间:2011-04-04 16:56:27

标签: image validation asp.net-mvc-3 razor

我正在尝试使用以下帮助程序类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.CompilerServices;
using System.Web.Mvc;
using System.Web.Routing;

namespace myNamespace
{
    public static class ValidationHelper
    {

        public static MvcHtmlString ValidationImage(this HtmlHelper helper, string name)
        {
            if (helper.ViewData.ModelState[name] == null || helper.ViewData.ModelState[name].Errors == null || helper.ViewData.ModelState[name].Errors.Count == 0)
            {
                return MvcHtmlString.Empty;
            }
                var tag = new TagBuilder("img");
                tag.Attributes.Add("src", "../Content/Images/check_bg_invalid.png");
                tag.Attributes.Add("alt", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
                tag.Attributes.Add("title", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
                tag.Attributes.Add("class", HtmlHelper.ValidationMessageCssClassName);
                return MvcHtmlString.Create(tag.ToString(TagRenderMode.SelfClosing));
        }
    }
}

在视图中使用它:

@Html.ValidationImage("FirstName")

尝试在出现验证错误时触发图像。

所以我有我的:

@Html.TextBox("FirstName", null, new { @class = "my_input" })

在同一视图中(全部在@ Html.BeginForm中)

这是我的model.cs类:

 public class QuoteModel
    {
        [Required(ErrorMessage = "You must specify a First Name.")]
        public string First Name { get; set; }

    }

这是我的controller.cs类:

public ActionResult Quote()
{
    //return View();
    var model = new QuoteModel();
    return View(model);
}

[HttpPost]
public ActionResult Quote(QuoteModel model)
{
    if (ModelState.IsValid)
    {
        try
        {
        }
        catch (Exception)
        {
            return View(model);
        }
    }
    return RedirectToAction("QuoteSuccess");
}

public ViewResult QuoteSuccess()
{
    return View();
}

请记住,我可能在前面的所有代码块中都输了一个错字。

最初,我用过

@Html.ValidationMessage("FirstName") 

单击发送后将触发错误消息。我现在尝试使用ValidationImage的上述帮助程序,但没有任何触发(并且错误消息未显示)。也没有任何带有<img>标记的输出。页面上没有错误。

顺便说一句,我还有两个问题: 1)我还想显示一个验证成功消息(即带有“OK”的小图像),但是在第一个实例中遇到上述工作时遇到了麻烦。 2)我以前没有成功(在使用帮助程序之前)来显示客​​户端验证。

使用

@{ Html.EnableClientValidation(); }

在同一视图中。我将它放在顶部(在@model之后)。安置是否重要?

我还在_layout.cshtml中使用了以下内容

<script language="javascript" src="@Url.Javascript("jquery.validate.min")" type="text/javascript"></script>
<script language="javascript" src="@Url.Javascript("jquery.validate.unobtrusive.min")" type="text/javascript"></script>

请注意,我使用了一个帮助程序,因此不需要“.js”扩展名 - 这在过去已经有效,并且显示在视图源中。所以没有问题。

最后,我确实设置了web.config:

  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

对我的任何一个问题(尤其是主要问题)的任何想法都非常感激。

1 个答案:

答案 0 :(得分:0)

在我看来,如果服务器端验证失败,您的验证图像将仅在页面中输出。这意味着您的客户端验证无法显示图像,因为它不会存在于HTML标记中(return MvcHtmlString.Empty;

如果您希望验证在客户端工作(并显示图像),您可能需要做一些工作来挂钩现有的验证。这里有一篇关于自定义验证的文章:

http://www.codeproject.com/Articles/98376/Including-custom-client-side-validations-in-your-A.aspx

虽然它可能有点过于复杂 - 可能有一种更简单的方法可以挂钩(尽管我现在找不到)。