Я нашел this tutorial о том, как создавать каскадные выпадающие списки в MVC с синтаксисом Razor. Я следил за учебником и отлично работал в его собственном проекте. Но теперь, когда я пытаюсь перенести его в мой фактический проект, я получаю сообщение об ошибке, когда первое раскрывающееся меню изменяется. В соответствии с сценарием появляется всплывающее сообщение:MVC: Получить URL-адрес метода при использовании маршрутизации
Failed to retrieve states: [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 ПОСЛЕ:
Во время просмотра сети трафика в инструментах разработчика Chrome, я сделал это в автономном проекте, который работает, и увидел эту запись с заголовком «GetStates» и этот URL: http://localhost:50266/CustomerFeedback/GetStates.
Я сделал это снова в своем фактическом проекте, и на этот раз я вижу запись с надписью «45 /» с этим адресом: http://localhost:65303/PatientSatisfactionSurvey/45/.
Я думаю, что это подтверждает мое подозрение, что URL-адрес является проблемой. Я собираюсь поиграть с выяснением того, как сделать этот URL действительным.
Другой Edit:
О проекте, который работает, если я иду: 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" }
);
Have вы посмотрели, что находится внутри объекта ex, используя отладчик или console.dir() или что-то еще? – br4d
Я хотел бы знать, как это сделать! Это javascript, поэтому он не попадет в стандартную точку останова. Я тоже знал, что MVC и jquery знают, как отлаживать это, или что означает console.dir(). Я начну искать, но если у вас будут быстрые указатели, я буду благодарен. –
Если вы откроете инструменты для разработки своего веб-браузера и перейдите в раздел «Сеть» и запустите код, вы увидите фактический запрос, отправляемый на сервер. Посмотрите на ответ там, и он должен сказать вам, почему он терпит неудачу. – br4d