我的控制器是这样的:
[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
会显示一条硬编码的消息?
答案 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));
});