【问题标题】:Why is the MVC controller action method tagged as HttpPost not getting invoked from external javascript file?为什么标记为 HttpPost 的 MVC 控制器操作方法没有从外部 javascript 文件中调用?
【发布时间】:2016-05-29 17:11:56
【问题描述】:

这里是相关的查看cshtml代码

<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>

这是包含 OnPatientSelected 的外部 javascript 文件

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();
        }

【问题讨论】:

  • 你能在你的动作方法中保留一个断点并检查它是否被命中
  • 您如何验证该操作没有被调用?另外请注意,提供的urlrelative to the current page's address,可能不是您期望的路径。
  • 尝试使用 fiddler 查看正在发出的调用和输出。另外,直接在浏览器中尝试 url 看看它是否有效:.../TasksSummary/TaksSummaryDetailsView?selectedPatientID="yourvalue"
  • 所以它在浏览器中工作的唯一方法是如果我删除方法名称顶部的 [HttPost] 标签,但是当我放置它时,我收到一个错误说 ActionName 不存在..... .. 在控制器“eRxWeb.Areas.CodeAThonMVC.Controllers.TasksSummaryController”上找不到公共操作方法“TasksSummaryDetailsView”。

标签: javascript asp.net-mvc asp.net-mvc-4 asp.net-ajax


【解决方案1】:

路径需要是相对的,尝试如下:

url: "../TasksSummary/TaksSummaryDetailsView",

甚至更好:

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

【讨论】:

  • 所以我尝试了所有可能的组合。还是行不通。我的控制器文件是 TasksSummaryController.cs,其中包含 HttpPost 标记的操作方法 TasksSummaryDetaillsView
【解决方案2】:

因此将 ajax 调用中的 url 行替换为以下内容,它可以工作

url:'TasksSummaryDetailsView'

【讨论】:

  • 您没有解释为什么会这样。你明白为什么这解决了这个问题吗?还是您只是重复了 James P 在他的回答中已经说过的话?
  • 因此,由于路径是相对的,因此使用上述行有效。没有 F12 网络错误。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2012-08-05
  • 2023-03-08
相关资源
最近更新 更多