500 Внутренняя ошибка в ASP.NET MVC Ajax

Я использую Visual Studio 2010 и MVC 4 для своего веб-приложения. Это мой код контроллера:

публичный ActionResult MyController()

    {
        if (Request.IsAjaxRequest())
        {
            using (MyContainer context = new MyContainer())
            {
                try
                {
                    var result = Some Query;

                    return PartialView("_MyView", result);
                }
                catch (Exception ex)
                {
                    
                }
            }
        }
        if (User.Identity.IsAuthenticated)
        {
            return RedirectToAction("Index", "Home", new { area = "User" });
        }
        else
        {
            return Redirect("/");
        }
    }

Этот метод будет выполнен успешно, но мой контейнер ajax ничего не показывает. В firebug возникла эта ошибка:

NetworkError: 500 Internal Server Error + http://localhost....?X-Requested-With=XMLHttpRequest

Почему возникает эта ошибка?
Что мне делать, чтобы решить эту проблему?
Заранее спасибо!


person Mojtaba    schedule 09.02.2013    source источник
comment
Вы можете выполнить некоторые основные действия по устранению неполадок, например, проверить, возникает ли какое-либо исключение, вместо того, чтобы иметь пустое предложение catch.   -  person Burhan Khalid    schedule 09.02.2013
comment
Установите <customErrors mode="Off"/> в своей веб-конфигурации и опубликуйте полное сообщение об ошибке, которое вы видите в firebug.   -  person nemesv    schedule 09.02.2013
comment
добавьте ведение журнала в свое приложение. например, nlog   -  person NickD    schedule 09.02.2013
comment
Моя точка зрения не исполнена. но я нашел { в моем коде запуска просмотра, который вызвал ошибку синтаксического анализатора. Когда в приложении возникла ошибка синтаксического анализатора, произошло 500 Internal Server Error. :-)   -  person Mojtaba    schedule 09.02.2013
comment
Я полагаю, это потому, что, скорее всего, ваше приложение ASP.NET столкнулось с каким-то необработанным исключением. Я также вижу, что вы используете using. Вы реализовали интерфейс IDisposable для типа MyContainer? Объект, предоставляемый оператору using, должен реализовывать интерфейс IDisposable. Этот интерфейс предоставляет метод Dispose, который должен освобождать ресурсы объекта. msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx   -  person Jigar Patel    schedule 09.02.2013
comment
@JigarPatel Код не будет скомпилирован, если MyContainer не реализует IDisposable.   -  person Morten Mertner    schedule 09.02.2013


Ответы (1)


Сообщение 500 Internal Server Error можно увидеть разными способами, потому что что-то не было нормально обработано на сервере. В вашем случае, как отмечается, ваш тип MyContainer не реализует интерфейс IDisposable, поэтому вы не можете использовать этот тип в блоке using(){ }. Когда вы используете тип в блоке using, этот тип должен реализовать IDIsposable, потому что, когда он будет преодолен, .Net Framework удалит экземпляр из кучи и ссылки. Я внес некоторые изменения в ваш код, не используя блок. Посмотри:

public ActionResult ActionName()
{
    if (Request.IsAjaxRequest())
    {
        try
        {
            MyContainer context = new MyContainer();

            var result = Some Query;
            return PartialView("_MyView", result);      
        }
        catch (Exception ex)
        {
            // return some partial error that shows some message error
            return PartialView("_Error");
        }
    }

    if (User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Index", "Home", new { area = "User" });
    }

    return Redirect("/");
}
person Felipe Oriani    schedule 09.02.2013