MVC3:jquery ajax从控制器返回带有HTML dataType的部分视图但是收到错误

时间:2014-05-17 12:22:38

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

我需要一些帮助。我在按钮点击事件中从jQuery ajax调用它时,从控制器操作返回部分视图为HTML dataType。

这是我主视图中的Javascript标记:

$(function () {
     $('#searchButton').click(function () {
        var DTO = {
            Name: $('#Name').val()
        };
        $.ajax({
            url: '/Grid/GetSearch',
            type: "GET",
            dataType: "html",
            data: DTO,
            cache: false,
            success: function (data) {
                //Fill div with results
                $("#SearchViewDiv").html(data);
            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            }
        });
    });
});

控制器代码:

[HttpGet]
    public ActionResult GetSearch(string name)
    {
        var accounts = _userAccounts.FindAll(x => x.Name.Contains(name));
        return PartialView("SearchResult", accounts);
    }

当jQuery ajax调用此操作时,我能够调试此控制器,但是当它返回时,我将进入jQuery Ajax的错误函数。所以猜测目标网址是正确的。但无法弄清楚我哪里出错了。如果需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:5)

试试这个:

$(function () {
    $('#searchButton').click(function () {
        $.ajax({
            url: "@(Url.Action("GetSearch"))",
            type: "GET",
            data: { name: $("#Name").val() },
            cache: false,
            success: function (data) {
                //Fill div with results
                $("#SearchViewDiv").html(data);
            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            }
        });
    });
});

这......

[HttpGet]
public PartialViewResult GetSearch(string name)
{
    return PartialView("SearchResult", _userAccounts.Where(u => u.Name.Contains(name)));
}

控制器动作参数大小写敏感性很重要(字符串名称!=字符串名称)。同样在html和jquery中:"#Name"和#34;#name"不一样在id字段中。警告......

答案 1 :(得分:4)

感谢Dzmitry的投入。但我找到了解决方案。

问题:问题是页面在点击按钮后重新加载,导致Ajax调用在返回此部分视图响应时被取消。

解决方案:只需添加event.preventDefault()即可解决此问题。 所以Javascript代码段看起来像这样,

$('#searchButton').click(function (e) {
        var DTO = {
            Name: $('#Name').val()
        };
        e.preventDefault();
        $.ajax({
            url: '/Grid/GetSearch',
            type: "GET",
            dataType: "html",
            data: DTO,
            cache: false,
            success: function (data) {
                //Fill div with results
                $("#SearchViewDiv").html(data);
            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            }
        });
    });

答案 2 :(得分:0)

如果您的按钮是实际的"按钮"元素而不是"输入"元素,然后确保添加type =" button"到按钮,否则默认为键入="提交",表单/页面将在点击该按钮时发布。通过将类型更改为"按钮",然后点击其他处理程序代码时没有任何反应。