Отображение сообщения об ошибке после проверки серверной части - PullRequest
0 голосов
/ 29 октября 2018

Мой контроллер выглядит примерно так:

 [HttpPost]
    [Route("Somewhere")]
    public JsonResult SetSomething(string propertyName, string propertyValue)
    {
        var successSave = this.SaveIt(propertyName,propertyValue);

        if(successSave)
            return Json(propertyValue);
        else 
           // Show a message in front end that there was problem in saving 
    }

И тогда мой взгляд сейчас выглядит примерно так:

@Model.SomethingFeild

Это просто загружает значение и показывает его в текстовом поле там. Итак, как я могу изменить это, чтобы иметь возможность обрабатывать сценарий псевдокода, который я написал в контроллере, чтобы, если что-то не так в БД (не проверка на внешнем интерфейсе), например, повторяющаяся запись, то оно возвращается и сообщает UI что так UI показывает жестко закодированное сообщение?

1 Ответ

0 голосов
/ 29 октября 2018

Оберните его в блок try catch и добавьте метод расширения для чтения исключения (или вашего типа исключения, который выдается) следующим образом:

[HttpPost]
    [Route("Somewhere")]
    public JsonResult SetSomething(string propertyName, string propertyValue)
    {
        try
        {
            var successSave = this.SaveIt(propertyName, propertyValue);

            if (successSave)
                return Json(new { success = true, value = propertyValue });
        }
        catch (Exception ex)
        {
            return Extensions.ReturnExceptionToView(ex);
        }

    }

Пример метода расширения (статический метод):

internal static JsonResult ReturnExceptionToView(Exception ex)
    {
        List<object> viewErrors = new List<object>();
        viewErrors.Add(new { ErrorMessage = ex.ToString() });
        return new JsonResult() { Data = (new { success = false, errors = viewErrors }) };
    }

Затем проверьте свойство успеха в ответе в JS. Пример ниже - использование ответа на вызов ajax и отправка в наблюдаемый массив Knockout.

if (response.success) {
            // do something with successful response
        } else {
            // we have an error in the response.errors collection
           $.each(response.errors, function () {
                    vm.saveErrors.push(new ErrorMsg(this.ErrorMessage));
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...