ASP.NET Core 也从客户端为 JSON 验证创建自定义数据注释
ASP.NET Core Create a Custom Data Annotation for JSON validation also from client side
我设法创建了一个自定义数据注释来验证该值是否有效 JSON。 class 当然可以改进,但我的问题是如何 link 对 class 的客户端验证:
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>
为了降低复杂性,您可以简单地使用 RemoteAttribute
来提供不显眼的 ajax 验证,如下所示:
在你的模型中 class 属性:
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);
}
}
我设法创建了一个自定义数据注释来验证该值是否有效 JSON。 class 当然可以改进,但我的问题是如何 link 对 class 的客户端验证:
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>
为了降低复杂性,您可以简单地使用 RemoteAttribute
来提供不显眼的 ajax 验证,如下所示:
在你的模型中 class 属性:
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);
}
}