Я нашел это руководство о том, как создавать каскадные раскрывающиеся списки в MVC с синтаксисом Razor. Я следовал руководству и отлично работал в своем собственном проекте. Но теперь, когда я пытаюсь перенести его в свой настоящий проект, я получаю сообщение об ошибке при изменении первого раскрывающегося списка. В соответствии со сценарием появляется предупреждение, в котором говорится:
Failed to retrieve states: [object Object]
Я понятия не имею, что означает [object Object]. Я предполагаю, что ошибка как-то связана с URL:
url: '@Url.Action("GetStates")
Но это всего лишь предположение. Основное различие между проектом-примером и реальным проектом заключается в том, что реальный проект использует маршрутизацию для URL-адреса. Вот весь скрипт:
<script src="~/Scripts/jquery-1.10.2.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"</script>
<script type="text/javascript">
$(document).ready(function () {
//Dropdownlist Selectedchange event
$("#Country").change(function () {
$("#State").empty();
$.ajax({
type: 'POST',
url: '@Url.Action("GetStates")', // we are calling json method
dataType: 'json',
data: { id: $("#Country").val() },
// here we are get value of selected country and passing same value as input to json method GetStates.
success: function (states) {
// states contains the JSON formatted list
// of states passed from the controller
$.each(states, function (i, state) {
$("#State").append('<option value="' + state.Value + '">' +
state.Text + '</option>');
// here we are adding option for States
});
},
error: function (ex) {
alert('Failed to retrieve states: ' + ex);
}
});
return false;
})
});
EDIT AFTER:
Наблюдая за сетевым трафиком в инструментах разработчика Chrome, я сделал это в автономном проекте, который работает, и увидел эту запись с заголовком «GetStates» и этот URL-адрес: http://localhost:50266/CustomerFeedback./GetStates.
Я сделал это снова в своем реальном проекте, и на этот раз я вижу запись с надписью «45/» с этим URL-адресом: http://localhost:65303/PatientSatisfactionSurvey/45/.
Я думаю, это подтверждает мое подозрение, что проблема в URL-адресе. Мне придется поиграть с выяснением того, как сделать этот URL действительным.
Еще одно изменение:
В проекте, который работает, если я перейду к: http://localhost:50266/CustomerFeedback/GetStates
Я получаю это:
Server Error in '/' Application.
This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.
Это ожидается, поскольку я пытаюсь использовать этот фактический метод. Это означает, что я могу перейти по URL-адресу метода. Но когда я пытаюсь сделать то же самое в своем проекте: http://localhost:65303/PatientSatisfactionSurvey/GetStates он просто загружает страницу. Это потому, что он считает, что «GetStates» — это параметр, а не метод.
Я НЕ МОГУ понять, каким будет URL-адрес метода! Чертова маршрутизация мешает....
routes.MapRoute(
"PatientSatisfactionSurvey",
"PatientSatisfactionSurvey/{ApptID}/{*LanguageCode}",
new { controller = "Forms", action = "PatientSatisfactionSurvey" },
namespaces: new[] { "GEDC.Controllers" }
);
<F12>
. - person War10ck   schedule 03.06.2015