Asp.net mvc ASP.NET MVC验证-如何更改MVC验证引擎输出的html?

Asp.net mvc ASP.NET MVC验证-如何更改MVC验证引擎输出的html?,asp.net-mvc,jquery-validate,validation,rendering,Asp.net Mvc,Jquery Validate,Validation,Rendering,在表单上使用ASP.NET MVC验证时,错误消息以特定的html格式输出。例如,如果您正在验证必须填写的文本框,则验证失败后的输出如下: <label for="MonkeyName">Name: </label> <span class="field-validation-error">*</span> <br /> <input class="input-validation-error" id="MonkeyName" n

在表单上使用ASP.NET MVC验证时,错误消息以特定的html格式输出。例如,如果您正在验证必须填写的文本框,则验证失败后的输出如下:

<label for="MonkeyName">Name: </label>
<span class="field-validation-error">*</span>
<br />
<input class="input-validation-error" id="MonkeyName" name="MonkeyName" type="text" value="" />
名称:
*

在上面的代码中,span标记由验证框架自动生成,并将名为input validation error的类添加到文本框中。但是如果我想让验证器生成不同的html呢

我希望使用MVC验证框架,但是我希望能够完全控制验证消息的显示方式,特别是因为MVC承诺控制UI。我设计的HTML和CSS(甚至在决定要使用的服务器端编程语言之前)对于错误消息是不同的,因为我想用textbox的容器而不是textbox本身设置一个类。以此为例:

<dl class="error">
  <dt>
    <label for="email">Email</label>
      <span class="required">Required</span> 
  </dt>
  <dd>
    <input class="textinput_med" id="FromEmail" name="FromEmail" type="text" value="" />
    <a href="#"><img src="Content/images/structure/help.png" width="30" height="30" alt="Help" /></a> 
    <span class="errormessage">Some Error</span> 
  </dd>
</dl>

电子邮件
要求的
一些错误
虽然我有一个错误消息的范围,但我想用名为error的css类设置容器标记(dl)。是否有一种方法可以确定验证框架呈现错误消息的方式


注意:尽管我考虑过使用jQuery的解决方案,该解决方案可以检测具有“输入验证错误”类的表单字段,并使用我的自定义css类“错误”设置它们各自的容器,但我认为这不是一个好的解决方案,我认为这是一个本可以更好的解决方案。如果解决了这个问题,我可以从MVC 2升级到MVC 3。

听起来你需要编写一个不同的扩展方法来编辑他们的内容

namespace HtmlExtensions
{
    public static HtmlString CustomValidateFor(this HtmlHelper helper, ...)
    {
        return Edit(helper.ValidateFor(...))
    }
}

听起来您需要编写一个不同的扩展方法来编辑它们的内容

namespace HtmlExtensions
{
    public static HtmlString CustomValidateFor(this HtmlHelper helper, ...)
    {
        return Edit(helper.ValidateFor(...))
    }
}

您可以从一个角度出发,利用ASP.NET MVC低调验证脚本如何使用
data valmsg for=“inputName”
属性搜索表单中的所有元素,并使用
字段验证错误
类标记它们。因此,您可以通过将该属性添加到容器来使用现有功能:

<dl data-valmsg-for="FromEmail" data-valmsg-replace="false">
  <dt>
    <label for="email">Email</label>
    <span class="required">Required</span> 
  </dt>
  <dd>
    <input class="textinput_med" id="FromEmail" name="FromEmail" type="text" value="" />
    <a href="#"><img src="Content/images/structure/help.png" width="30" height="30" alt="Help" /></a> 
  </dd>
</dl>

电子邮件
要求的
然后,
将在
之外获得
字段验证错误
类。这里的缺点是丢失验证错误消息。如果您使用的是验证摘要,那么这可能不是问题(您可以通过使用
data valmsg summary=“true”
标记容器并在其中放置
来控制该容器)


如果在框架内工作不适合您,您可以随时根据自己的喜好调整jquery.validate.unobtrusive.js。错误样式设置/放置代码非常简单,只要你仔细考虑一下(具体来说,请查看第39行和第55行的
onError
onError
函数).

您可以从一个角度出发,利用ASP.NET MVC低调验证脚本如何使用
data valmsg for=“inputName”
属性搜索表单中的所有元素,并使用
字段验证错误
类标记它们。因此,您可以通过将该属性添加到容器来使用现有功能:

<dl data-valmsg-for="FromEmail" data-valmsg-replace="false">
  <dt>
    <label for="email">Email</label>
    <span class="required">Required</span> 
  </dt>
  <dd>
    <input class="textinput_med" id="FromEmail" name="FromEmail" type="text" value="" />
    <a href="#"><img src="Content/images/structure/help.png" width="30" height="30" alt="Help" /></a> 
  </dd>
</dl>

电子邮件
要求的
然后,
将在
之外获得
字段验证错误
类。这里的缺点是丢失验证错误消息。如果您使用的是验证摘要,那么这可能不是问题(您可以通过使用
data valmsg summary=“true”
标记容器并在其中放置
来控制该容器)

如果在框架内工作不适合您,您可以随时根据自己的喜好调整jquery.validate.unobtrusive.js。错误样式设置/放置代码非常简单,只要你仔细考虑一下(具体来说,请查看第39行和第55行的
onError
onError
函数)