2013-02-13 4 views
0

Ниже приведен вызов Ajax, который я делаю для контроллера, когда пользователь нажимает на определенный значок в моем ASP MVC3 View. Предполагается вызвать метод в контроллере по имени PopDetails, однако после установки контрольной точки в контроллере я вижу, что этого не происходит. Я попытался использовать оба URL, перечисленных ниже, однако ни один из них не работал. Поскольку это первый раз, когда я использовал Ajax, я не совсем уверен, что происходит. Любые идеи или предложения будут очень признательны!Метод контроллера ASP MVC не называется должным образом через Ajax

Ajax код из просмотра:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function GetProgramDetails(pgmname) { 

     var request = $.ajax({ 
      type: 'POST', 
      url: '~/BatchProgramsContoller/PopDetails', 
      //url: '~/BatchProgramsContoller/PopDetails', 
      data: { programName: pgmname }, 
      dataType: 'html' 
     }); 

     request.done(function (data) { 
      $('#programExplanation').html(data); 
     }); 
    } 
</script> 

Метод из BatchProgramsController:

[HttpPost] 
    public string PopDetails(string programName) 
    { 
     BatchPrograms batchprograms = db.BatchPrograms.Find(programName); 
     if (batchprograms == null) return string.Empty; 
     StringBuilder s = new StringBuilder(); 
     s.Append(batchprograms.ProgramName + " - " + batchprograms.ShortDescription); 
     s.Append("<br />Job Names: " + batchprograms.PrdJobName + ", " + batchprograms.QuaJobName); 
     s.Append("<br /> " + batchprograms.Description); 
     return s.ToString(); 
    } 
+0

попробуйте сбросить ~ и просто использовать/BatchProgramsContoller/PopDetails –

+0

все еще ничего ... – NealR

+0

можете ли вы поставить точку останова на вызов ajax? он вызван? –

ответ

4
url: '~/BatchProgramsContoller/PopDetails', 

должен быть изменен на

url: '~/BatchPrograms/PopDetails', 

или более вероятно

url: '/BatchPrograms/PopDetails', 
+0

'url: '/ BatchPrograms/PopDetails',' работал. Спасибо! – NealR

1

Обычно считается неправильной практикой в ​​.net mvc для URL-адресов жесткого кода, как это сделано в ответе выше.

Я хотел бы использовать

url: '@Url.Action("BatchPrograms", "PopDetails")', 

Таким образом, если ваши маршруты изменить по любой причине помощник MVC URL заботится о нем.

+0

это правда Рик. Но я думаю, что Нил уже это знает. Хотя плохой практикой является использование жестких URL-адресов, для разработчиков очень сложно использовать жесткие URL-адреса при разработке раздражающего ** синтаксиса-неумолимого-javascript ** кода. –

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