【问题标题】:Set error message for validation of non-nullable types为验证不可为空的类型设置错误消息
【发布时间】:2020-10-28 21:51:11
【问题描述】:

我使用 ASP.NET 核心 3.1

我有:

class A
{
    public int A {get;set;}
}

当我发送 json 模型 {"A": null} 我得到 "error": "INVALID"。但我等待“需要”。

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.1#required-validation-on-the-server

我试过按照上面写的做,但是没用。

options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
            _ => "The field is required.");

如何自定义消息?

【问题讨论】:

  • 您考虑过使用可为空的 int 吗?
  • @HenkvanBoeijen 是的,如果设置了 [Required] 属性,它就可以工作。但我感兴趣的是不可为空。
  • 你可以得到你在ModelState=>Values=>Errors中设置的错误信息(在我的答案图片中),然后错误信息就会显示在视图中。

标签: .net asp.net-core asp.net-web-api


【解决方案1】:

您的意思是您无法在控制器中收到错误消息?这是一个有效的演示:

TestInt:

public class TestInt
    {
        public int a { get; set; }
        public string b { get; set; }
    }

控制器:

[AcceptVerbs("GET")]
        public ActionResult CheckA() {
           
            return View();
        }
        [AcceptVerbs("POST")]
        public ActionResult CheckA(TestInt testInt)
        {
            if (!ModelState.IsValid) {
                StringBuilder result = new StringBuilder();

                foreach (var item in ModelState)
                {
                    string key = item.Key;
                    var errors = item.Value.Errors;

                    foreach (var error in errors)
                    {
                        result.Append(key + " " + error.ErrorMessage);
                    }
                }

                TempData["Errors"] = result.ToString();
            }
            return View();
        }

查看:

<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="a" class="control-label"></label>
                <input asp-for="a" class="form-control" />
                <span asp-validation-for="a" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="b" class="control-label"></label>
                <input asp-for="b" class="form-control" />
                <span asp-validation-for="b" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Test" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

startup.cs:

services.AddControllers()
                .AddMvcOptions(options =>
                {
                    options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
                        _ => "REQUIRED");
                });

结果:

【讨论】:

    【解决方案2】:

    作为一个技巧,您可以将特殊字段用作字符串并将其转换为接收方!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2016-08-01
      • 2011-03-31
      • 2023-01-05
      • 1970-01-01
      相关资源
      最近更新 更多