2016-05-29 32 views
1

下面是相關查看CSHTML代碼爲什麼標記爲HttpPost的MVC控制器操作方法沒有從外部JavaScript文件調用?

<tbody> 
    @foreach (var task in Model.TasksSummaryList) 
    { 
     <tr> 
      <th onclick="OnPatientSelected('@task.PatientID')">@task.PatientName</th> 
      <th>@task.Status</th> 
      <th>@task.TaskCount</th> 
      <th>@task.MostRecentTask</th> 
     </tr> 
    } 
</tbody> 

這裏的JavaScript文件,其中包含OnPatientSelected外部

function OnPatientSelected(selectedPatientID) { 
    $.ajax({ 
     type: "POST", 
     url: "TasksSummary/TaksSummaryDetailsView", 
     data: { selectedPatientID: selectedPatientID }, 
     error: function() { 
      alert("fail"); 
     }, 
     success: function(){ 
     alert("success"); 
     } 
    }); 
    } 

這始終顯示成功,但永遠不會調用控制器ActionMethod我想

[AllowAnonymous] 
     [HttpPost] 
     public ActionResult TasksSummaryDetailsView(/*data from view*/string selectedPatientID) 
     { 
      int i = 09; 
      //Received PatientID from View (Client) 
      //Browse to the appropriate view 
      return View(); 
     } 
+0

你可以保持一個斷點在您操作方法,並檢查它是否被擊中 –

+0

您是如何驗證該操作未被調用的?另外,請注意,提供的'url'是[相對於當前頁面的地址](https://stackoverflow.com/questions/4765740/relative-urls-in-ajax-requests),並且可能不會導致您期望的路徑。 –

+0

嘗試使用fiddler來查看正在進行的呼叫以及輸出是什麼。另外,直接在瀏覽器中試試看看它是否有效:'.../TasksSummary/TaksSummaryDetailsView?selectedPatientID =「yourvalue」' – TheUknown

回答

1

路徑需要是相對的,請嘗試如下所示:

url: "../TasksSummary/TaksSummaryDetailsView", 

甚至更​​好:

url: '@Url.Action("TasksSummary", "TasksSummaryDetailsView")', 
+0

所以我嘗試了所有可能的組合。還是行不通。 我的控制器文件是TasksSummaryController.cs,並且包含HttpPost標記的操作方法TasksSummaryDetaillsView –

+0

F12 dev工具中的任何錯誤 - 網絡? –

-1

所以換成下面的AJAX調用的URL線和它的作品

網址: 'TasksSummaryDetailsView'

+0

你沒有解釋爲什麼這會起作用。你明白爲什麼這個問題解決了嗎?或者你是否重複了詹姆斯P在他的回答中已經說過的話? –

+0

因此,由於路徑是相對的,所以使用上面的線路工作。沒有F12網絡錯誤。 –

相關問題