[asp.net-mvc]为验证创建属性和更改参数值

标签: Asp.net-MVC .Net C#
发布时间: 2017/3/25 3:58:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要得到参数在控制器中的操作和验证此参数。例如︰

public TestController
{
    public ActionResult TestMethod(int testParamFromUri)
    {
        //here is my validation
        if(testParamFromUri < 0)
        {
            throw new TestException();
        }
        if(testParamFromUri > 50)
        {
            testParamFromUri = 50;
        }

        //other code
    }
}

我的问题︰

它是可能要创建属性哪里像在上述方法的验证吗?

然后使用此属性︰

public ActionResult TestMethod([TestVerification]int testParamFromUri)

解决方法 1:

我不认为你可以得到所需的行为,所述基于这个答案;因为没有好的方法来访问验证的值。

你能做的是使用自定义ModelValidator将执行任何自定义的验证,你想为一个特定的模型。

我找不到好的教程,但你可以得到基本设置下面的想法。

控制器代码

public TestController
{
    public ActionResult TestMethod(ModelName model)
    {
        //This will be false if your ModelState validator fails.
        if(ModelState.IsValid)
        {
            ....
        }
    }
}

模型代码

public class ModelName
{
    public int testParamFromUri { get; set; }
}

模型验证程序代码

public class ModelNameValidator : IModelValidator<ModelName>
{
    public ModelNameValidator()
    {
    }

    public IEnumerable<ModelValidationResult> Validate(ModelName model)
    {
        //here now my verification
        if(model.testParamFromUri < 0)
        {
            yield return new ModelValidationResult()
            {
                MemberName = "testParamFromUri",
                Message = "Model Error Message Here"
            };
        }
    }
}

现在,一旦所有这些已经安装,您需要注册的模型验证,以便每当执行视图模型使用。 这是在 Global.asax 文件中完成的。

Global.asax

ModelValidatorProviders.Providers.Add(new ModelNameValidator());

此外,根据您的验证是如何复杂,你可以只是使用 DataAnnotation 对您新创建的模型和 ModelValidator 那么就没有必要。

public class ModelName
{
    [Range(0, int.MaxValue, ErrorMessage="Error Message")]
    public int testParamFromUri { get; set; }
}
赞助商