ASP.NET Core Создание пользовательской аннотации данных для проверки JSON также на стороне клиента - PullRequest
0 голосов
/ 25 января 2019

Мне удалось создать пользовательскую аннотацию данных, чтобы проверить, является ли значение допустимым JSON.Конечно, класс можно улучшить, но моя проблема в том, как связать проверку на стороне клинта с классом:

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>

1 Ответ

0 голосов
/ 25 января 2019

Чтобы уменьшить сложность, вы можете просто использовать 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);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...