2016-09-07 2 views
0

Во время работы с сеткой пользовательских интерфейсов Kendo для ASP.NET MVC я нахожу некоторое разочаровывающее поведение, которое я не могу понять или найти какую-либо информацию. У меня есть сетка, которая делает запрос kendoGrid.saveChanges() серверу, который имеет некоторую проверку на стороне сервера. Если проверка на стороне серверов не удается, он возвращает следующий результат:MVC Ajax.error render Partial View

Response.StatusCode = HTTP_BAD_CLIENT_REQUEST; // const int 400 
return PartialView("Error/BadRequest"); 

Частичный вид просто имеет некоторую базовую HTML для отображения информации об ошибках пользователя, и ошибка DataSource обратного вызова сетки в выполняете следующих действий:

function errorCallback(e) { 
    // Handles explicit Ajax and Kendo DataSource error callbacks 
    var content = e.responseText || e.xhr.responseText; 
    // Wrapper around a kendo.ui.Window to display content 
    Core.Alert.raiseAlert(content); 
} 

Когда я запускаю проект в режиме отладки или публикую версию версии проекта на моем локальном компьютере, значение e.xhr.responseText заполняется правильно, то есть содержит HTML-сообщение частичного представления. Однако, как только я переведу это на производственный сервер, e.xhr.responseText просто содержит значение "Bad Request", которое также является кодом статуса HTTP, который я использую в настоящее время. Я пробовал использовать другие коды состояния, но результат тот же (имя ошибки используется как responseText).

Причина, по которой я нахожу это настолько странным, что я делаю что-то подобное в другом проекте для внутреннего применения в нашей компании, и это работает отлично. Они работают на тех же версиях и инструментах как Kendo, так и ASP.NET.

Может ли кто-нибудь указать мне прямо из инструментов или документации, Kendo или AJAX, которые объясняют, почему текст ответа не использует мой частичный результат обзора или как я могу сопоставить результат частичного представления? Я отправляю в свойство xhr.responseText?

Редактировать: При попытке использования различных кодов ошибок я обнаружил, что некоторые коды состояния, такие как 405 (не разрешено), приводили к возврату html-ошибки сервера IIS. Итак, теперь я действительно тупик, почему некоторые статусные коды просто возвращают имя запроса, в то время как другие возвращают шаблонный HTML для этого кода ошибки, когда я указываю возвращаемое значение и представление для возврата?

ответ

0

Кредит на выводы и решения относится к this post.

После некоторого копания я выяснил, что проблема с IIS переопределила содержимое (и, следовательно, частичное представление), отправленное, когда я использовал коды состояния HTTP-ошибок.

Решение заключается в добавлении тега <httpErrors> в system.webServer в web.config. Я обнаружил, что для того, чтобы мои частичные взгляды могли достичь клиента, было достаточно.

<system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
</system.webServer>