从jQuery Get()调用时,JsonResult返回视图html而不是序列化对象

时间:2009-06-24 21:56:21

标签: jquery asp.net-mvc json

我正在尝试使用jQuery从MVC用户控件中获取json序列化对象。问题是返回的结果是包含我的控件的页面的完整HTML。页面和控件使用相同的控制器。我试过打破我在控制器中调用的方法,它永远不会被击中。我尝试过各种jQuery Ajax调用,并获得相同的结果。

jQuery代码:

<script type="text/javascript">
$('#Project_GeneralContractor_Id').change(function() {
    //alert('<%= Url.Action("GetGeneralContractor", "Projects") %>/1');
    $.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) {
        alert(data);
    });
});
</script>

控制器代码:

public JsonResult GetGeneralContractor(int id)
{
    return Json(_GeneralContractorRepository.Get(id));
}

其中$('#Project_GeneralContractor_Id')是一个下拉列表,_GeneralContractorRepository.Get(id)返回一个单独的GeneralContractor对象。

不确定我发生了什么,但我怀疑jQuery方面,因为我似乎无法在控制器中休息。

3 个答案:

答案 0 :(得分:0)

您需要指定type:json($ .get的第四个可选参数)。请参阅$.get arguments

 $.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) {
        alert(data);
    }, "json");

答案 1 :(得分:0)

您是否尝试过使用getJSON()

如果不是,我将倾向于服务器端问题。很难猜到没有看到正在返回的页面。

答案 2 :(得分:0)

这是路由问题。 My Projects控制器有一些特殊的路由案例。我创建了一个单独的控制器来管理GeneralContractors,一切都很顺利。