2015-06-03 3 views
0

Я нашел 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" } 
     ); 
+0

Have вы посмотрели, что находится внутри объекта ex, используя отладчик или console.dir() или что-то еще? – br4d

+0

Я хотел бы знать, как это сделать! Это javascript, поэтому он не попадет в стандартную точку останова. Я тоже знал, что MVC и jquery знают, как отлаживать это, или что означает console.dir(). Я начну искать, но если у вас будут быстрые указатели, я буду благодарен. –

+0

Если вы откроете инструменты для разработки своего веб-браузера и перейдите в раздел «Сеть» и запустите код, вы увидите фактический запрос, отправляемый на сервер. Посмотрите на ответ там, и он должен сказать вам, почему он терпит неудачу. – br4d

ответ

0

Наконец-то это удалось. Моя проблема была в три раза.Во-первых, когда я посмотрел на источнике HTML, оказалось, это:

url: '@Url.Action("GetStates")', // we are calling json method 

оказывал как это:

url: '' 

После того, как я вынул синтаксис бритвы, он по крайней мере, оказанными надлежащим образом в HTML. Тем не менее, все еще ошибочный URL. Поскольку карта маршрута я использую имел параметры в нем, я в конечном итоге просто создать совершенно новую карту маршрута для этого метода:

 routes.MapRoute(
      "GetStates", 
      "GetStates", 
      new { controller = "Forms", action = "GetStates" }, 
      namespaces: new[] { "xyz.Controllers" } 
     ); 

Тогда я изменил URL строку в JavaScript, чтобы выглядеть следующим образом:

url: 'GetStates' 

Но проблема в том, что это было просто добавление/GetStates до конца любого URL-адреса, на котором я оказался. Если вы разместили весь полный URL-адрес там, например ...

url: 'http://localhost:65303/GetStates' 

Это сработало. Но по очевидным причинам этот URL-адрес не является долгосрочным решением. Итак, using this thread, я наконец нашел ответ. Я был в состоянии получить полный URL этого метода GetStates() следующим образом:

// Get the fully qualifed URL of the FollowUpOptions() method for use in building the cascading dropdown 
UrlHelper Url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext); 
myModel.ullDropdownUrl = Url.Action("GetStates", "Forms", new { }, this.Request.Url.Scheme); 

Тогда я был в состоянии сделать это в JavaScript, который, наконец, получил его все работы:

url: '@Model.fullDropdownUrl' 
0

Попробуйте изменить @ Url.Action ("GetStates") в:

@Url.Action("ControllerName", "ActionName") 

Probbaly что-то вроде @Url.Action("PatientSatisfactionSurvey", "GetStates") , который будет генерировать URL, как ~/PatientSatisfactionSurvey/GetStates/5 где 5 - идентификатор, который он захватывает из элемента html с идентификатором страны.

+0

brd4, Я ДЕЙСТВИТЕЛЬНО ценю вашу помощь. К сожалению, я получаю те же результаты. Я узнал кое-что. Переход к исходному вопросу. Обновить в 5. –

Смежные вопросы