代码之家  ›  专栏  ›  技术社区  ›  mattruma

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

  •  0
  • mattruma  · 技术社区  · 15 年前

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

    同时 拖放工作 ,我无法启动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 回复  |  直到 15 年前
        1
  •  4
  •   Josh Pearce    15 年前

    您试图从查询字符串中获取taskid和stageid,但您将它们作为post发送,这意味着它们位于消息体中。将方法签名更改为:

    public ActionResult EditStage(int taskID, intstageID)
    

    访问参数。

    或者,只需将jQueryAjax方法更改为get,并将您的操作更改为allow get。

    或者,将这些值附加到URL,比如,

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

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