为什么浏览器不会从控制器呈现响应?

时间:2015-04-28 16:41:45

标签: javascript asp.net-mvc

当对控制器进行POST时,控制器会响应我希望浏览器呈现的内容。但浏览器不会呈现响应。我已经证实Fiddler的反应很好。

下面的代码显示了我认为的相关代码。返回响应的控制器操作方法,具有mvc帮助程序代码的模板的一部分,使用表单输入触发ajax调用的javascript / jquery代码。

我想使用FormCollection。为什么浏览器没有呈现响应,我该怎么做才能修复它?

BoMController

public ActionResult GetBillOfMaterialsView(FormCollection frmColl){
    // snipped out model interaction
    return PartialView("~/Views/Project/Index.cshtml", project);
}

Index.cshtml

@using (Html.BeginForm("GetBillOfMaterialsView", "BoM", FormMethod.Post, new {id = "frmGetBom"})) { 
     // selProj input select code removed for brevity 
}

    function submitGetBoM() {
        var frmGetBom = $('#frmGetBom');
        $.ajax({
            type: 'POST',
            url: frmGetBom.attr('action'),
            data: frmGetBom.serialize()
        });
    }

    $(document).ready(function() {
        $('#selProj').selectmenu( {
            select: function(){submitGetBoM()}
        }).addClass("overflow");
    });

2 个答案:

答案 0 :(得分:2)

单独调用$.ajax并不会将服务器的响应附加到文档中,您必须使用success回调来手动获取响应并附加它。

例如:

$.ajax({
    type: 'POST',
    url: frmGetBom.attr('action'),
    data: frmGetBom.serialize(),
    success: function(response) {
         $('#someContainerId').html(response);
    }
});

或者,使用load(),它是上述的简写:

$('#someContainerId').load(frmGetBom.attr('action'), frmGetBom.serializeArray());

请参阅Documentation

答案 1 :(得分:0)

您的客户端代码不对服务器返回的值执行任何操作:

function submitGetBoM() {
    var frmGetBom = $('#frmGetBom');
    $.ajax({
        type: 'POST',
        url: frmGetBom.attr('action'),
        data: frmGetBom.serialize(),
        success: function() { alert('ok'); }
    });
}

这会弹出成功警报。