AJAX HTTP方法GET仅转到服务器一次

时间:2014-07-17 06:57:42

标签: c# jquery asp.net-mvc http

当我在action方法中使用断点向服务器发出ajax请求时,它仅在第一次停止在此断点上。点击第二个,第三个等后,它会在此断点处停止但不会停止。当我将方法从GET更改为POST时,它每次都会停止。这种行为的原因是什么?

客户端:

$(function () {
    setListAction();
});

function setListAction() {
    $("li.list").on("click", function () {
        alert("active");
        var id = $(this).attr("file-id");

        $.ajax({
            type: "GET",
            url: "TechAcc/ManageFile/" + id,
            beforeSend: function myfunction() {
                $("#loading").css("display", "block");
                $("#fade").css("display", "block");
            },
            success: function (data) {
                var content = $(data).find("div#content");
                $("div#content").html(content.html());

                $("#loading").css("display", "none");
                $("#fade").css("display", "none");
            }
        });
    });
}

服务器端:

[HttpGet]
        public ActionResult ManageFile(int id = 0)
        {
            FileModel model = null;

            if (id != 0)
                model = new FileModel() { File = _repository.GetFileBy(id), GetAllFiles = _repository.GetAllFiles() };
            else if (Session["Model"] != null)
                model = (FileModel)Session["Model"];
            else
                model = new FileModel() { GetAllFiles = _repository.GetAllFiles() };

            return View(model);
        }

1 个答案:

答案 0 :(得分:0)

如果您的ID为“内容”的div有列表,则无效。

<div id="content">
if your list is here, it won't work.
...
<li class="list">...</li>
...
</div>

如果你的设计是这样的,你需要在替换HTML响应后绑定click事件。即,

success: function (data) {
                var content = $(data).find("div#content");
                $("div#content").html(content.html());

                //adding code here.
                $("div#content").find("li.list").on("click", function() {
                //same above click code should come here.
                //Note: this newly added code block should not come here in click.
                });

                $("#loading").css("display", "none");
                $("#fade").css("display", "none");
            }