我正在尝试使用以下帮助程序类
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>
对我的任何一个问题(尤其是主要问题)的任何想法都非常感激。
答案 0 :(得分:0)
在我看来,如果服务器端验证失败,您的验证图像将仅在页面中输出。这意味着您的客户端验证无法显示图像,因为它不会存在于HTML标记中(return MvcHtmlString.Empty;
)
如果您希望验证在客户端工作(并显示图像),您可能需要做一些工作来挂钩现有的验证。这里有一篇关于自定义验证的文章:
http://www.codeproject.com/Articles/98376/Including-custom-client-side-validations-in-your-A.aspx
虽然它可能有点过于复杂 - 可能有一种更简单的方法可以挂钩(尽管我现在找不到)。