jQuery ajax post不在我的控制器中调用方法

时间:2009-11-15 12:09:35

标签: jquery asp.net-mvc

我有一个允许用户排序​​的任务列表,目前我正在处理从一个容器到另一个容器的拖放。

拖放工作时,我无法触发jQuery帖子。不确定这里发生了什么。

以下是我目前正在使用的jQuery:

<script type="text/javascript"> 
    $(function() {
        $(".sortable").sortable({
            connectWith: '.connectedSortable',
            cursor: 'move',
            items: '.queueItem',
            receive: function(event, ui) {
                //Extract column num from current div id
                var stageId = $(this).attr("id").replace("stage", "");
                var taskId = $(ui.item).attr("id").replace("task", "");
                $.ajax({
                    url: '/Task/EditStage',
                    type: 'POST',
                    data: { 'taskId': taskId, 'stageId': stageId }
                });
            }
        }).disableSelection();
    });    
</script> 

我的控制器操作方法如下:

    [AcceptVerbs(HttpVerbs.Post), Authorize]
    public ActionResult EditStage()
    {
        Task task = this.TaskRepository.GetTask(
            int.Parse(this.Request.QueryString["taskId"]));
        Stage stage = this.StageRepository.GetStage(
            this.Request.QueryString["stageId"]);

        task.StageId = stage.StageId;

        this.TaskCommentRepository.Save();

        return this.Content(string.Format("The stage for Task {0} has been changed to {1}", task.TaskId, stage.Name));
    }

用户已获得授权,只是好奇我能忽略的是什么?展望未来,我如何测试这个以查看挂断是什么?

提前致谢!

1 个答案:

答案 0 :(得分:4)

您正尝试从查询字符串中获取taskID和stageID,但是您将它们作为POST发送,这意味着它们位于邮件正文中。将方法签名更改为:

public ActionResult EditStage(int taskID, intstageID)

并改为访问参数。

或者,只需将JQuery AJAX方法更改为GET,然后将操作更改为允许获取。

或者,将值附加到URL,如

var url = '/Task/EditStage?taskID=' + taskID + "&instageID=" + instaveID;

并在没有数据的AJAX调用中使用该url变量。