部分视图上的 MVC 4 自定义验证不显示错误消息?

MVC 4 Custom validation on Partial View don't show error message ?

当我点击索引页面上的提交按钮时,看到下图:

我的问题: 我只是自定义必需属性,为什么 ProductDescription 的错误消息不显示?

我的所有文件,请参阅以下部分:

ProductModel.cs

namespace TestCustomValidation.Models
{
    public class ProductModel
    {
        [Required(ErrorMessage = "It's for test for ProductName")]
        public string ProductName { get; set; }

        [CustomRequired(ErrorMessage = "It's for test for ProductDescription")]
        public string ProductDescription { get; set; }
    }
}

index.cshtml

...
@{Html.RenderAction("Form");}
...

_FormPartial.cshtml

@model TestCustomValidation.Models.ProductModel
@using (Html.BeginForm("FormSubmit", "Home", new { @id = "form", @name = "form" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <table cellpadding="0" cellspacing="0">
        <tr>
            <th colspan="2" align="center">Person Details</th>
        </tr>
        <tr>
            <td>Name: </td>
            <td>
                @Html.TextBoxFor(m => m.ProductName)
            </td>
            <td>
                @Html.ValidationMessageFor(m => m.ProductName)
            </td>

        </tr>
        <tr>
            <td>Description: </td>
            <td>
                @Html.TextBoxFor(m => m.ProductDescription)
            </td>
            <td>
                @Html.ValidationMessageFor(m => m.ProductDescription)
            </td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Submit" /></td>
        </tr>
    </table>
}

HomeController.cs

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public PartialViewResult Form()
        {
            ProductModel model = new ProductModel();
            return PartialView("_FormPartial", model);
        }

        [HttpPost]
        public ActionResult FormSubmit(ProductModel model)
        {
            if (ModelState.IsValid)
            {
                string name = model.ProductName;
                return RedirectToAction("About");
            }

            return PartialView("_FormPartial", model);
        }
}

CustomRequiredAttribute.cs

namespace TestCustomValidation.CustomValidation
{
    public class CustomRequiredAttribute : RequiredAttribute
    {
    }
}

感谢提前!

我敢打赌,您的页面中包含 jQuery 验证,但它实际上不会进入您的服务器,而是向您显示与该输入字段关联的消息作为客户端验证。

我的回答,供进一步参考:

Global.asax.cs

protected void Application_Start()
{
    // Add Custom Attribute
    System.Web.Mvc.DataAnnotationsModelValidatorProvider.RegisterAdapter(
                typeof(TestCustomValidation.CustomValidation.CustomRequiredAttribute),
                typeof(System.Web.Mvc.RequiredAttributeAdapter));

}