return Json error from ASP.NET MVC

后端 未结 4 1879
悲&欢浪女
悲&欢浪女 2020-12-13 06:11

I\'m trying to return an error message via Json from ASP.NET MVC controller. I want to display carriage returns on the screen, so the error will look like:

相关标签:
4条回答
  • 2020-12-13 06:46

    Yea, you're defeating the purpose like @Hector said..

    And if you want to return true JSON, maybe try returning a Json(Dictionary<String, Object>) instead of a Json(string).

    0 讨论(0)
  • 2020-12-13 06:48

    It seems to me that you already made almost everything correct. The results which you have in the xhr.responseText is a JSON string. So you should insert only one additional call of the JSON.parse function

    .ajax({...
        error: function(xhr, textStatus, exceptionThrown) {
            $('#result').html(JSON.parse(xhr.responseText));
        },
    

    then the data like '"Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"' will be converted to the string 'Error 1.<br/>Error 2.<br/>'.

    Inside of success event handler the ajax function call JSON.parse for you, but it do this not inside of the error handler. So converting the server response from JSON string you have to do manually.

    0 讨论(0)
  • 2020-12-13 06:56

    would be nicer to return a list of errors and then build the html at the client.

    Response.StatusCode = (int)HttpStatusCode.BadRequest;
    List<string> errors = new List<string>();
    //..some processing
    errors.Add("Error 1");
    //..some processing
    errors.Add("Error 2");
    return Json(errors);
    

    and then at the client side

     .ajax({...
        error: function(xhr, textStatus, exceptionThrown) {
          var errorData = $.parseJSON(xhr.responseText);
          var errorMessages = [];
          //this ugly loop is because List<> is serialized to an object instead of an array
          for (var key in errorData)
          {
             errorMessages.push(errorData[key]);
          }
           $('#result').html(errorMessages.join("<br />"));
      },
    

    you can also return a more specific error object and use a template solution, but this is the idea

    0 讨论(0)
  • 2020-12-13 07:02

    If you are using JSON you probably don't want to embed HTML (that sort of defeats the purpose of returning a "data" object that you will format on the view.)

    If you want to return HTML you could do this in your controller:

    Response.StatusCode = (int)HttpStatusCode.BadRequest;
    return Content("Error 1.<br/>Error 2.<br/>"); 
    
    0 讨论(0)
提交回复
热议问题