【问题标题】:ASP MVC controller method not being called properly via Ajax没有通过 Ajax 正确调用 ASP MVC 控制器方法
【发布时间】:2013-02-13 18:14:32
【问题描述】:

以下是每当用户单击我的 ASP MVC3 视图上的某个图标时我对控制器进行的 Ajax 调用。它应该以PopDetails 的名称调用控制器中的方法,但是在控制器中设置断点后,我可以看到这没有发生。我尝试使用下面列出的两个 URL,但都没有工作。因为这是我第一次使用 Ajax,所以我不太确定发生了什么。任何想法或建议将不胜感激!

来自 View 的 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();
    }

【问题讨论】:

  • 尝试删除 ~ 并使用 /BatchProgramsContoller/PopDetails
  • 你能在ajax调用上设置一个断点吗?它被调用了吗?
  • 是的。我使用了 Chrome 的开发者控制台,设置了几个断点,然后看到 Ajax 被调用了。

标签: jquery ajax asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:
url: '~/BatchProgramsContoller/PopDetails',

应该改为

url: '~/BatchPrograms/PopDetails',

更有可能

url: '/BatchPrograms/PopDetails',

【讨论】:

    【解决方案2】:

    在 .net mvc 中,硬编码网址通常被认为是不好的做法,如上述答案中所做的那样。

    我会用

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

    这样,如果您的路由因任何原因发生更改,mvc url 助手会处理它。

    【讨论】:

    • 这是真的,瑞克。但我认为尼尔已经知道这一点。虽然使用硬 url 是不好的做法,但遗憾的是,开发人员在开发烦人的 syntax-unforgiving-javascript 代码时使用硬 url 是很常见的。
    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 2017-11-16
    • 2019-12-09
    • 2018-01-14
    • 2020-04-13
    • 2010-12-21
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多