检查后端后显示错误消息

时间:2018-10-29 15:58:49

标签: asp.net-mvc

我的控制器是这样的:

 [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

这只是加载值并将其显示在其中的文本框字段中。 因此,如何更改此设置以能够处理我在控制器中编写的psedo代码方案,因此,如果DB中发生了错误(不是前端虚拟化),例如重复条目,那么它将返回并告诉{ {1}}这样UI会显示一条硬编码的消息?

1 个答案:

答案 0 :(得分:2)

将其包装在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));
            });