没有通过Ajax正确调用ASP MVC控制器方法

时间:2013-02-13 18:14:32

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

以下是每当用户点击我的ASP MVC3 View上的某个图标时,我向控制器发出的Ajax调用。它应该通过名称PopDetails在控制器中调用一个方法,但是在控制器中设置断点之后我可以看到这没有发生。我尝试使用下面列出的两个网址,但都没有用。由于这是我第一次使用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();
    }

2 个答案:

答案 0 :(得分:4)

url: '~/BatchProgramsContoller/PopDetails',

应改为

url: '~/BatchPrograms/PopDetails',

或更可能

url: '/BatchPrograms/PopDetails',

答案 1 :(得分:1)

在.net mvc中,通常认为硬编码网址的做法不如上面的答案所示。

我会用

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

这样,如果你的路由因任何原因而改变,那么mvc url helper会处理它。