当前位置: 首页 > 面试题库 >

MVC3和JSON.stringify()ModelBinding返回空模型

费朗
2023-03-14
问题内容

我正在尝试使用MVC3和JSON进行模型绑定,但是运气不佳…不管我做什么,我似乎都null服务器上获取模型。

方法签名:

public ActionResult FilterReports(DealSummaryComparisonViewModel model)

Javascript已 更新

<script type="text/javascript" language="javascript">

    $(document).ready(function () {
        $('#filter-reports').click(filterReports);
    });

    function filterReports() {
        var filters = {
            SelectedRtoId: $('#SelectedRtoId').val(),
            SelectedPricingPointId: $('#SelectedPricingPointId').val(),
            SelectedLoadTypeId: $('#SelectedLoadTypeId').val(),
            SelectedBlockId: $('#SelectedBlockId').val(),
            SelectedRevisionStatusId: $('#SelectedRevisionStatusId').val()
        }
        var dealSummaries = { SelectedItemIds: $('#SelectedItemIds').val() }
        var model = { ReportingFilters: filters, DealSummaries: dealSummaries }

        $('#selected-items select option').attr("selected", "selected");
        $.ajax({
            url: '@Url.Action("FilterReports")',
            data: model,
            contentType: 'application/json',
            dataType: 'json',
            success: function (data) {
                alert(data);
            }
        }); 
    }
</script>

楷模:

public class DealSummaryComparisonViewModel
{
    public ReportingFiltersViewModel ReportingFilters { get; set; }
    public LadderListViewModel DealSummaries { get; set; }
}

public class LadderListViewModel
{
    public MultiSelectList AvailableItems { get; set; }

    public int[] SelectedItemIds { get; set; }
    public MultiSelectList SelectedItems { get; set; }
}

public class ReportingFiltersViewModel
{
    public int? SelectedRtoId { get; set; }
    public ICollection<Rto> Rtos { get; set; }

    public int? SelectedPricingPointId { get; set; }
    public ICollection<PricingPoint> PricingPoints { get; set; }

    public int? SelectedLoadTypeId { get; set; }
    public ICollection<LoadType> LoadTypes { get; set; }

    public int? SelectedBlockId { get; set; }
    public ICollection<Block> Blocks { get; set; }

    public int? SelectedRevisionStatusId { get; set; }
    public ICollection<RevisionStatus> RevisionStatuses { get; set; }

    public bool? DealStatus { get; set; }
}

该模型在客户端看起来不错:

{"ReportingFilters":{
    "SelectedRtoId":"5",
    "SelectedPricingPointId":"20",
    "SelectedLoadTypeId":"55",
    "SelectedBlockId":"21",
    "SelectedRevisionStatusId":"11" 
},"DealSummaries":{
    "SelectedItemIds":["21","22","23","24","25"] 
}}

那为什么我什么也没回到控制器上呢?在过去的两天里,这一直给我带来麻烦,请帮忙!谢谢!!

更新
我已经将我的javascript部分更新为我当前正在使用的部分。现在,此部分将模型与ReportingFilers和DealSummaries对象一起返回给控制器,但是其中的所有值均为null。

它可能与字符串值有关吗?如果是这样,我该如何解决?


问题答案:

将$ .getJSON行更改为:

$.ajax({ 
   url: '@Url.Action("FilterReports")',
   data: JSON.stringify(viewModel),
   contentType: 'application/json',
   dataType: 'json',
   success: function (data) { alert(data); }
});

这样,MVC知道它正在接收JSON,并将其正确绑定到模型。



 类似资料:
  • 问题内容: 我正在使用Asp.net MVC3,并尝试在服务器上做一个简单的Ajax发布,它返回部分视图并在搜索过程中更新我的项目列表。 Ajax成功调用服务器,服务器通过发送部分视图进行响应。但是部分视图始终在新页面中呈现。我发现这是因为它不知道即将到来的ajax调用,因此它呈现了一个新页面。 我的控制器代码非常简单: 但是无论如何,Request.IsAjaxRequest()始终返回fals

  • 问题内容: 这个问题已经问了很多遍了,但是我发现所有的解决方案都没有用。让我认为这可能是一个新问题,也许是ASP.NET MVC 3特有的问题。 我正在使用JQuery Ajax对ASP.NET MVC 3控制器进行简单调用。像这样 控制器看起来像这样 这不起作用,尽管它应该基于Scottgu 帖子的“ JavaScript和AJAX改进”部分 我已经尝试过许多不同的变化,例如: 然后将以上两种方

  • 请看一下查询: 基本上,我希望查询获取TableA上的最新条目(列ID是AI),条件是列A='foo'。 查询将顺利运行并返回我需要的内容。如果没有与条件ColumnA='foo'匹配的表项,则结果为空。 说到这里,我添加了一个CASE来返回1。否则,返回Id。下面是新的查询: 使用给定的查询,如果条件为false,则不会有任何结果。它是空白的。甚至不是空的。 问题是,这是为什么?在我看来,结果应

  • 我无法理解为什么findFragmentByTag()在我的代码中返回null。我已经在片段onCreate()上设置了RetainInstance(true),并且正在使用getSupportFragmentManager()。findFragmentByTag(),因为它是SherlockFragmentActivity。 这是我的活动代码: } 这是我的片段代码:

  • 下面是我的控制器代码:- 以下是我的服务代码:- 下面是我的存储库代码:-

  • 问题内容: 我想获取执行.py文件的当前目录的路径。 例如,一个带有代码的简单文件: 输出奇怪的是: 我期待从和获得相同的结果。 给定,为什么 返回空? 问题答案: 因为不成立。我们宁愿有 双方并只拆分通过文件名成组件,而不考虑当前目录。如果您还想考虑当前目录,则必须明确地考虑。 要获取绝对路径的目录名,请使用