访问MVC3中发布的JSON

时间:2014-03-03 21:56:47

标签: asp.net-mvc json asp.net-mvc-3 model-binding

我有以下View模型

public class SaveFileRequestViewModel
{
    public string FileName { get; set; }
    public ISearchAccounts AccountSearch { get; set; }
}

ISearchAccounts定义如下

public interface ISearchAccounts
{
    int Id { get; set; }
    SearchTypes SearchType { get; }
    string UserId { get; set; }
    DateTime CreatedOn { get; set; }
    string Description { get; set; }
    AccountNumberType AccountNumberType { get; set; }
}

我想要做的是使用模型绑定器来捕获SaveFileRequestViewModel,检查SearchType属性(JSON中提供的属性)并使用JSON.NET序列化到ISearchAccounts的相应实现。 Addtional属性在JSON中,JSON.NET将知道该怎么做。我的问题是,当我尝试绑定SaveFileRequestViewModel属性的AccountSearch属性时,它为null。

bindingContext.ValueProvider.GetValue("AccountSearch");

我可以在特定范围内访问属性,如

bindingContext.ValueProvider.GetValue("AccountSearch.SearchType");

我对其他方法持开放态度,但我想我只是想抓住AccountSearch所包含的提交的JSON部分。

以下是我提交的JSON的示例。根据用户在UI中选择的选项

,它可能会复杂得多
{
"FileName":"filename 2014-03-03 16.24.17",
"AccountSearch":
    {
        "AccountNumberType":"XXX",
        "AccountNumbers":"123456789 6789101245",
        "SearchType":"Multiple"
    }
}

1 个答案:

答案 0 :(得分:0)

看看最近的答案:https://stackoverflow.com/a/22082643/148998

总结一下,Asp.net-mvc 3框架有一个默认的JsonValueProviderFactory,只要发布到Action的JSON数据与Model匹配就应该正确绑定数据。

小心将属性的名称弄错,它找不到并绑定它。

我建议将模型的填充版本序列化为JSON,并查看它的结构,只要您将它以相同的结构发送回来就可以了。

相关问题