2013-02-13 83 views
0

下面是我在用戶單擊ASP MVC3視圖上的某個圖標時對控制器進行的Ajax調用。它應該在控制器中調用一個名爲PopDetails的方法,但是在控制器中設置一個斷點後,我可以看到這沒有發生。我嘗試使用下面列出的兩個URL,但都沒有工作。由於這是我第一次使用Ajax,我不確定發生了什麼。任何想法或建議將不勝感激!從查看通過Ajax無法正確調用ASP MVC控制器方法

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 – 2013-02-13 18:16:17

+0

仍然沒有... – NealR 2013-02-13 18:18:33

+0

你可以在ajax調用上放一個斷點嗎?它會被叫嗎? – 2013-02-13 18:23:48

回答

4
url: '~/BatchProgramsContoller/PopDetails', 

應改爲

url: '~/BatchPrograms/PopDetails', 

或更可能

url: '/BatchPrograms/PopDetails', 
+0

'url:'/ BatchPrograms/PopDetails','工作。謝謝! – NealR 2013-02-13 18:30:49

1

在.net mvc中通常被認爲是不好的做法,在上面的答案中對網址進行了硬編碼。

我會用

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

這樣,如果你的路由以任何理由MVC的URL幫手照顧它改變。

+0

這是真的Rik。但我認爲尼爾已經知道這一點。儘管使用硬鏈接是不好的做法,但開發人員在開發令人討厭的**語法 - 非 - forfor-javascript **代碼時使用硬鏈接是非常常見的。 – 2013-02-14 04:57:14