Ajax get model属性为空

时间:2014-04-18 06:25:01

标签: jquery ajax asp.net-mvc asp.net-mvc-4

我有这种结构的模型

public class VariantsByAgeFilterViewModel
{
    public string Variant { get; set; }
    public AgeGroup agegroup1 { get; set; }                 
}

public class AgeGroup
{
    public int? AgeFrom { get; set; }
    public int? AgeTo { get; set; }
}

并使用ajax调用

 $.ajax({
        url: $('.chart-container').data('chart-url'),
        type: 'GET',
        data: { chart: $("#chart").val() },
        dataType: 'JSON',
        success: function (result) {

        }
    });

chart-url看起来如此:

@Url.Action(MVC.Reports.VariantByMaleFemaleResult_Chart().AddRouteValues(Model.FilterModel))

这是我的行动

[HttpGet]
public virtual JsonResult VariantByAgeGroupResult_Chart(VariantsByAgeFilterViewModel filterModel, VariantByMaleFemaleCharts chart, VariantsByMaleFemaleResultViewModel viewModel) {

    ChartDataModel model = new ChartDataModel();
    var agefrom = filterModel.agegroup1.AgeFrom ;

    return Json(new { data = model }, JsonRequestBehavior.AllowGet);
}

当ajax调用控制器动作并设置模型参数时,agegroup1属性为null,但在模型中它具有值。也简单地输入属性 - 变量在ajax调用期间具有值。

1 个答案:

答案 0 :(得分:1)

我很确定如果您将模型重构为像这样的扁平模型,这将有效

public class VariantsByAgeFilterViewModel
{
    public string Variant { get; set; }
    public int? AgeFrom { get; set; }
    public int? AgeTo { get; set; }                
}

内部AddRouteValues使用RouteValueDictionary来解析对象。而且据我所知,它在解除嵌套类型和数组方面并不擅长。

希望它有所帮助!