标签: model-validation

如何将ASP.NET MVC3请求验证异常作为模型或属性验证错误处理

我的问题很有希望.提交表单后,我想将包含无效字符(特别是HTML)的所有属性(字段)标记为模型错误.我面临的问题是请求验证在模型绑定/验证之前启动并且我获得了HTTP 500 ...我看到了一个类似的问题,它[AllowHtml]在Model/ViewModel上使用属性属性或<httpRuntime requestValidationMode="2.0" />在web.config中使用属性属性 ,但是我在我正在寻找的是如何" 全局捕获请求验证异常并将其显示为模型错误 ".此外,我不想"剥离"HTML标签,我想通知用户他们的输入无效.

我想过使用正则表达式验证属性来查找错误的输入,但正如我所提到的,ASP.NET MVC3上的请求验证发生在模型绑定/验证之前,所以这是不行的...

可以在此处找到关于请求验证的非常好的概述.

request-validation model-validation asp.net-mvc-3

9
推荐指数
1
解决办法
1963
查看次数

asp.net core 2.0模型验证不验证数据

我正在使用ASP.NET Core 2.0默认模型验证,ModelState.IsValid尽管模型中存在错误数据,但似乎无法使用始终为真.

[HttpPost("abc")]
public async Task<IActionResult> Abc([FromBody]AbcViewModel model)
{
    if (!ModelState.IsValid) { return BadRequest(ModelState); }
    ...
}

public class AbcViewModel
{
    [Required(ErrorMessage = "Id is required")]
    [Range(100, int.MaxValue, ErrorMessage = "Invalid Id")]
    public int Id { get; set; }

    public bool Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我从Angular应用程序发布数据时,值正确映射到模型,但如果Id为"0"或小于100,则验证器RequiredRange验证器都不起作用且ModelState.IsValid始终为true.我错过了什么?

c# model-validation asp.net-core

8
推荐指数
1
解决办法
1181
查看次数

使用WebApi [Route]属性时,FluentValidation不起作用

我在我的WebApi项目控制器中成功实现了FluentValidation,该控制器只有一个HttpGet方法.当我添加另一个HttpGet方法时,我将路由属性添加到两个方法中.即[Route("Method1")]和[Route("Method2")].

现在无论我是否输入任何数据,ModelState都会返回true.

这是我的代码.

WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.Filters.Add(new ValidateModelStateFilter());

        //FluentValidation
        FluentValidationModelValidatorProvider.Configure(config);

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{action}/{id}",
            defaults: new { controller = "Menu", id = RouteParameter.Optional}
        );


    }
}
Run Code Online (Sandbox Code Playgroud)

ValidateModelStateFilter

public class ValidateModelStateFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpGet]
[Route("Method1")]
public IHttpActionResult ReadAllMenusByApplication([FromUri] ReadAllMenusByApplicationInput input)
{
        var result = new List<ApplicationMenu>();
        ...
} …
Run Code Online (Sandbox Code Playgroud)

c# model-validation fluentvalidation asp.net-web-api

7
推荐指数
1
解决办法
1455
查看次数

如何使用带有IEnumerable <T>的Html.CheckBox(列表)和验证

我正在一个页面上,用户需要填写一些信息,最后选择一个或多个带有复选框的客户.

客户列表是IEnumerable<Customer>我传递给我的模型的.我将如何使用创建复选框列表.CheckBoxFor()

最后,我希望能够验证是否已选择至少1个复选框.

请求是保存用户输入的信息的对象.

<% foreach (var customer in Model.Request.Customers) { %>
   <%= Html.CheckBoxFor(/* customer */) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?或者我这样做是错的?

validation asp.net-mvc model-validation

6
推荐指数
1
解决办法
1万
查看次数

django manytomany验证

请参阅下面的代码.基本上,当用户创建此类的对象时,他们需要指定value_type.如果value_type==2(百分比),则percentage_calculated_on(表单/模板一侧的CheckboxSelectMultiple需要检查一个或多个项目.模型验证不允许我像我正在尝试验证 - 它基本上抛出一个异常,告诉我实例在使用多对多关系之前需要有一个主键值.但是我需要先保存它之前验证对象.我已经在表单(modelform)端尝试了这个验证(使用表格的清洁方法),但同样的事情也发生在那里.

我如何实现此验证?

INHERENT_TYPE_CHOICES = ((1, 'Payable'), (2, 'Deductible'))
VALUE_TYPE_CHOICES = ((1, 'Amount'), (2, 'Percentage'))

class Payable(models.Model):
    name = models.CharField()
    short_name = models.CharField()
    inherent_type = models.PositiveSmallIntegerField(choices=INHERENT_TYPE_CHOICES)
    value = models.DecimalField(max_digits=12,decimal_places=2)
    value_type = models.PositiveSmallIntegerField(choices=VALUE_TYPE_CHOICES)
    percentage_calculated_on = models.ManyToManyField('self', symmetrical=False)

    def clean(self):
        from django.core.exceptions import ValidationError
        if self.value_type == 2 and not self.percentage_calculated_on:
            raise ValidationError("If this is a percentage, please specify on what payables/deductibles this percentage should be calculated on.")
Run Code Online (Sandbox Code Playgroud)

django validation model-validation

6
推荐指数
1
解决办法
2009
查看次数

ASP.NET MVC模型验证打破了MVC规则?

使用ASP.NET MVC,我有一个模型,我附加属性,以便我可以使用MVC模型绑定验证,但这不会打破MVC的规则,你放置属于的项目视图,进入模型?我希望我不是为了变得聪明,但我对其他人的意见感到好奇.

public class Payments
{
    [DataType(DataType.Text)]
    [DisplayFormat(NullDisplayText="")]
    [Display(Name="Payment Id")]
    [Required(ErrorMessage="Required")]
    public int PaymentId { get; set; } //todo: make this into a dropdown

    [DataType(DataType.Text)]
    [Display(Name="Bill Name")]
    [Required(ErrorMessage = "Required")]
    public string PaymentName { get; set; }

    [DataType(DataType.Date)]
    [Display(Name="Date to Post Payment")]
    [Required(ErrorMessage = "Required")]
    public DateTime PaymentDate { get; set; }

    [DataType(DataType.Currency)]
    [Range(0, 922337203685477.5807)]
    [Required(ErrorMessage = "Required")]
    public double PaymentAmount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc model view model-validation

6
推荐指数
2
解决办法
1801
查看次数

MVC DateTime验证失败

我发现了许多simulair问题,但不是一个有效的干净解决方案.我看到很多自定义代码可以让它工作,但为什么会这样?这应该从一开始就不起作用吗?

我认为奇怪的是,在IE9中它可以工作,但在Firefox和Chrome中它失败了.每当我在Firefox或Chrome中尝试时,我都会收到消息"字段生日必须是日期".

当我在新的MVC 4 RTM项目中尝试下面的代码时,我无法让它工作.我在所有浏览器中都看到DateTime.Now默认为dd-MM-yyyy(Holland)但我无法在Firefox和Chrome中提交它.

全局标记未在web.config中设置,因此必须使用默认值.我来自荷兰,所以它应该得到我猜的客户文化.

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    //[DataType(DataType.Date)]
    public DateTime Birthday { get; set; }
}

[AllowAnonymous]
    public ActionResult Register()
    {
        RegisterModel vm = new RegisterModel()
        {
            Birthday = DateTime.Now
        };
        return View(vm);
    }

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                //WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                //WebSecurity.Login(model.UserName, model.Password);
                return …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc model-validation asp.net-mvc-3 asp.net-mvc-4

6
推荐指数
2
解决办法
1万
查看次数

如何禁用MVC 4模型验证?

我正在研究一个在mvc 4上编写的项目,该项目有几个类似向导的行为实例 - 几个视图链通过相同的半填充模型.从第二个视图控件开始最初显示为无效(这是逻辑 - 模型,传递给控制器​​方法具有相应的属性为空).目前 ModelState.Clear(); 使用的是解决方案,但是将模型作为参数放入每个方法看起来很难看.与此处的方法相同,在Asp.Net MVC中禁用模型验证

ModelBinders.Binders[typeof(MyModelType)] = new NonValidatingModelBinder();
Run Code Online (Sandbox Code Playgroud)

项目有太多(超过100个)模型类来手动注册每个模型类.

是否有更简单的方法(也许键入.config)完全关闭模型验证?

c# asp.net-mvc model-validation

6
推荐指数
1
解决办法
6652
查看次数

在视图中验证没有BeginForm的多个部分视图

我有一个View (Index.cshtml)它有两个模态(Bootstrap模态).

我有一个装Partial View在每个modal.所以在这里View,我有两个Partial Views(AddContractHistory.cshtmlAddCompany.cshtml).

我有一个模型,它的字段应该在每个中验证Partial Views.我需要分别验证每个部分视图.

在相同的其他问题,Html.BeginForm被使用,但我对工作MVC模块和DNN 8Html.BeginFormAjax.Html.BeginForm不被支持.

为了完成这项工作而没有BeginForm,我测试了许多方法,如下面但我不能正确地做到这一点.

ASP.NET MVC验证组?

ASP.NET MVC在一个页面中的多个表单:验证不起作用

Index.cshtml(查看)

@using MyProject.BusinessLogic
<div class="form-group">
    <div class="col-sm-12">
        <button type="button" class="btn btn-success" onclick="$('#AddContractHistory').modal('show');">
            <i class="fa fa-plus"></i>
            New ContractHistory
        </button>
    </div>
    <div class="col-sm-12">
        <button type="button" class="btn btn-success" onclick="$('#AddCompany').modal('show');">
            <i class="fa fa-plus"></i>
            New Company
        </button>
    </div>
</div>

<div id="AddContractHistory" class="modal fade" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc jquery dotnetnuke model-validation

6
推荐指数
1
解决办法
510
查看次数

ASP.NET MVC 模型绑定和验证顺序

我有一个模型(简化)如下:

public UserModel {
    ...
    public USState State {get; set; }
    public string StateString {get; set; }
    public Country Country {get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我需要的验证规则是:

  1. 如果Country美国,State需要。
  2. 如果Country不是美国,StateString需要。

我创建了一个自定义验证属性RequiredIfAttribute。这很好用,所以我不打算用它的实现来回答这个问题。它有三个必需的成员:

  1. CompareField - 这是用于检查是否需要验证的字段。
  2. CompareValue - 这是它将用来比较以决定是否需要验证的值。
  3. CompareType - 这就是它如何比较值来决定是否需要验证。

所以有了这个,我更新了我的模型:

public UserModel {
    ...
    [RequiredIf("Country", Country.USA, EqualityType.Equals)]    
    public USState State {get; set; }
    [RequiredIf("Country", Country.USA, EqualityType.NotEquals)] 
    public string StateString {get; set; }
    [Required]                                                   
    public Country Country {get; …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc model-binding model-validation asp.net-mvc-4

5
推荐指数
1
解决办法
2938
查看次数