Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证自定义绑定的模型中的单个属性_C#_.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 验证自定义绑定的模型中的单个属性

C# 验证自定义绑定的模型中的单个属性,c#,.net,asp.net-mvc,asp.net-mvc-3,C#,.net,Asp.net Mvc,Asp.net Mvc 3,我只想验证该模型的单个属性 public ActionResult Rate([Bind(Exclude="Score")]RatingModel model) { if(ModelState.IsValid) { //here model is validated without check Score property validations model.Score = ParseScore( Request.Form("score

我只想验证该模型的单个属性

public ActionResult Rate([Bind(Exclude="Score")]RatingModel model)
{    
    if(ModelState.IsValid)
    {
         //here model is validated without check Score property validations
         model.Score = ParseScore( Request.Form("score")); 
         // Now i have updated Score property manualy and now i want to validate Score property    
    }
}
在手动分配分数后,Mvc框架不会检查模型的验证。现在我想用模型上当前存在的所有验证属性验证Score属性。 //如何轻松做到这一点?Mvc框架支持这个场景吗

这是我的模型

public class RatingModel
{
    [Range(0,5),Required]
    public int Score { get; set; }  
}    

您正在使用MVC3。您为什么不在模型中设置一些最基本的验证规则,有什么特别的原因吗

您可以直接在模型中设置一些验证规则。例如,如果要验证电子邮件字段,可以在模型本身中设置规则甚至错误消息

[Required(ErrorMessage = "You must type in something in the field.")]
[RegularExpression(".+\\@.+\\..+", ErrorMessage = "You must type in a valid email address.")]
[Display(Name = "Email:")]
public string Email { get; set; }
请在此处阅读更多信息:

您需要检查控制器操作中的ModelState是否有效:

public ActionResult Action(RatingModel viewModel)
{
    if (ModelState.IsValid) 
    {
        //Model is validated
    }
    else
    {
        return View(viewModel);
    }
}

我找到了正确的解决办法。我只调用TryValidateModel,它验证属性包括Score属性

public ActionResult Rate([Bind(Exclude="Score")]RatingModel model)
{    
    model.Score = ParseScore( Request.Form("score"));
    if(TryValidateModel(model))
    {
        ///validated with all validations
    }

}

嘿,你误解我了。我知道你所说的。请检查问题的更新版本。如果我有理由手动绑定Score属性,我如何才能获得ModelState的好处。有效检查?我希望能够在不读取属性的情况下轻松地执行此操作,并向ModelState.addmodeleror添加错误method@Marting-我已重新更新了我的问题,以使其更清楚。你能检查一下reagain吗?当你做绑定模型时,你是在排除分数。。。为什么不包括它,它将为您进行验证?MVC不能绑定该属性,这就是我以自定义方式绑定它的原因。如果我包含它,那么ModelState.IsValid将始终为false。这就是为什么它被排除在外。