【问题标题】:ASP.NET Core Create a Custom Data Annotation for JSON validation also from client sideASP.NET Core 也从客户端为 JSON 验证创建自定义数据注释
【发布时间】:2019-01-25 07:45:20
【问题描述】:

我设法创建了一个自定义数据注释来验证该值是否是有效的 JSON。当然可以改进课程,但我的问题是如何将 clint 端验证链接到课程:

public sealed class ValidateJsonAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object json, ValidationContext validationContext)
    {
        try
        {
            var result = JsonConvert.DeserializeObject(json.ToString());
        }
        catch (JsonReaderException ex)
        {
            return new ValidationResult(ex.Message);
        }

        return ValidationResult.Success;
    }
}

这是客户端验证的示例,我该如何修复它以满足我的需要?

<script type="text/javascript">
        $.validator.addMethod("cannotbevalue", function (value, element, params) {
            if ($(element).val() == params.targetvalue) {
                return false;
            }
            return true;
        });

        $.validator.unobtrusive.adapters.add('cannotbevalue', ['value'], function (options) {
            options.rules['cannotbevalue'] = { targetvalue: options.params.value };
            options.messages['cannotbevalue'] = options.message;
        });
    </script>

【问题讨论】:

  • addMethod 方法中准确检查您在 ValidateJsonAttribute 中所做的事情,并根据检查返回 true 或 false。
  • 在这种情况下,远程远程属性验证会容易得多。
  • @TanvirArjel 感谢您的回复,我会通知您:-)
  • @TanvirArjel 它可以工作而且很简单,谢谢。如果你把它作为解决方案,我很乐意接受。
  • 好的!谢谢。我在写!

标签: asp.net-core data-annotations unobtrusive-validation


【解决方案1】:

为了降低复杂性,您可以简单地使用RemoteAttribute 提供不显眼的 ajax 验证,如下所示:

在您的模型类属性中:

public class MyModel
{
    [Remote("IsInputStringValidJson", "Validation", ErrorMessage = "Input string is not a valid Json string")]
    public string MyProperty { get; set; }
}

然后在Validation控制器中:

public class ValidationController : Controller
{

    public JsonResult IsInputStringValidJson(string myProperty)
    { 
        try
        {
             var result = JsonConvert.DeserializeObject(myProperty);
        }
        catch (JsonReaderException ex)
        {
             return Json(false)
        }

        return Json(true);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多