I have a method in a controller that looks like this:
[HttpPost]
public void UnfavoriteEvent(int id)
{
try
{
var rows = _connection.Execute("DELETE UserEvent WHERE UserID = (SELECT up.UserID FROM UserProfile up WHERE up.UserName = @UserName) AND EventID = @EventID",
new { EventID = id, UserName = User.Identity.Name });
if (rows != 1)
{
Response.StatusCode = 500;
Response.Status = "There was an unknown error updating the database.";
//throw new HttpException(500, "There was an unknown error updating the database.");
}
}
catch (Exception ex)
{
Response.StatusCode = 500;
Response.Status = ex.Message;
//throw new HttpException(500, ex.Message);
}
}
And as you can see I've tried a couple of different ways to throw this error back. In the JavaScript I have the following block to call this method:
var jqXHR;
if (isFavorite) {
jqXHR = $.ajax({
type: 'POST',
url: '/Account/UnfavoriteEvent',
data: { id: $("#EventID").val() }
});
}
else {
jqXHR = $.ajax({
type: 'POST',
url: '/Account/FavoriteEvent',
data: { id: $("#EventID").val() }
});
}
jqXHR.error = function (data) {
$("#ajaxErrorMessage").val(data);
$("#ajaxError").toggle(2000);
};
Now, what I want to do is get the error that occurs thrown back to the jqXHR.error
function so that I can handle it properly.
Currently the code that is uncommented throws an exception saying that the text I'm placing in Status
is not allowed, and the commented code actually returns the standard error page as the response (not surprising really).
So, I have a couple of questions:
Response.Status
property do?Thanks all!
You will be abled to get the response status from the javascript side, doing the following:
$.ajax({
type: 'POST',
url: '/Account/UnfavoriteEvent',
data: { id: $("#EventID").val() },
success: function(data, textStatus, jqXHR) {
// jqXHR.status contains the Response.Status set on the server
},
error: function(jqXHR, textStatus, errorThrown) {
// jqXHR.status contains the Response.Status set on the server
}});
As you can see, you must pass the function for error
to the ajax
function... in you example, you are setting the function to the error
property of jqXHR
with no effect at all.
Documentation on ajax events
jQuery docs say that the error string will come in the errorThrown
parameter.
Do not use Response
Instead, you should return HttpStatusCodeResult
:
[HttpPost]
public void UnfavoriteEvent(int id)
{
try
{
var rows = _connection.Execute("DELETE UserEvent WHERE UserID = (SELECT up.UserID FROM UserProfile up WHERE up.UserName = @UserName) AND EventID = @EventID",
new { EventID = id, UserName = User.Identity.Name });
if (rows != 1)
{
return new HttpStatusCodeResult(500, "There was an unknown error updating the database.");
}
}
catch (Exception ex)
{
return new HttpStatusCodeResult(500, ex.Message);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With