2011-08-24 59 views
0

我有一个自我验证模型。提交表单时,错误不会显示在相应文本框下方的视图中。但是,它只显示在ValidationSummary中。我希望它显示在每个文本框下方。谢谢。自我验证模型不会返回错误?

型号:

public class BankAccount : IValidatableObject 
{  
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
    List<ValidationResult> errors = new List<ValidationResult>(); 
    if (string.IsNullOrEmpty(LastName)) 
    { 
     errors.Add(new ValidationResult("Enter valid lastname por favor.")); 
    } 

    if (string.IsNullOrEmpty(FirstName)) 
    { 
     errors.Add(new ValidationResult("Enter valid firstname por favor.")); 
    } 

    return errors; 
    } 
} 

控制器:

public class HomeController : Controller 
    { 
    public ActionResult Index() 
    { 
     BankAccount oBankAccount = new BankAccount(); 
     return View("Home", oBankAccount); 
    } 


    [HttpPost]  
    public ActionResult Index(BankAccount oBankAccount) 
    { 
     return View("Home", oBankAccount); 
    } 
    } 

查看:

@model BankAccountApp.Models.BankAccount 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Home</title> 
</head> 
<body> 
    <div>  

    @using (@Html.BeginForm("Index", "Home")) 
    { 
     @Html.ValidationSummary() 

     // FirstName TextBox 
     <span>FirstName: </span> 
     @Html.TextBoxFor(model => model.FirstName) 
     @Html.ValidationMessageFor(model => model.FirstName) 

     <br /> 

     // LastName TextBox 
     <span>LastName: </span> 
     @Html.TextBoxFor(model => model.LastName) 
     @Html.ValidationMessageFor(model => model.LastName, null, new { @class = "formErrors" })  

     <input type="submit" value="submit me" /> 
    } 

    </div> 
</body> 
</html> 
+0

当你标记你的'用'LastName'属性会发生什么[必需(的ErrorMessage = “测试”)]'属性? – Tejs

+0

当我按照你说的添加必要的属性时,如果没有填充任何内容,它会在旁边显示“测试”。如果填充了内容,则不显示任何内容。 – SaltProgrammer

回答

3

改变你的方法如下

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
    if (string.IsNullOrEmpty(LastName)) 
    { 
     yield return new ValidationResult("Enter valid lastname por favor", new[] { "LastName" }); 
    } 

    if (string.IsNullOrEmpty(FirstName)) 
    { 
     yield return new ValidationResult("Enter valid firstname por favor.", new[] { "FirstName" }); 
    } 
    } 
+0

这很好。谢谢一堆!你能解释我为什么没有工作,这个工作吗? – SaltProgrammer

+2

如果您没有将字段名称作为第二个参数提供给ValidationResult构造函数,那么运行时将结果与模型相关联,而不是模型上的特定属性。 Html.ValidationMessageFor正在查找与表达式中的属性相关联的结果,但未找到与模型相关的结果。 – OdeToCode

+1

@salt程序员传奇人物Scott Allen(OdeToCode)在上面的评论中回答了你的问题。 –

0

这听起来像你用于制作模型验证已过时的方法。我会建议转到DataAnnotations方法来验证模型。这似乎工作。

+0

是什么让你说它已经过时了?它已被弃用?谢谢。 – SaltProgrammer