如何在asp.net mvc5中从json中绑定模型属性

本文关键字:json 绑定 模型 属性 中从 mvc5 asp net | 更新日期: 2023-09-27 18:14:44

我有一个viewModel在Asp.net mvc5包含一个对象:

public class ConvenioViewModel
{
     public Convenio Convenio { get; set; }
     public string AnotherProperty {get;set;}
}

我需要在Form Submit中使用json填充这个属性,因为我在输入中隐藏了json:

        @Html.HiddenFor(x => x.Convenio, new { @id = "convenioJson" })

和我的Javascript是这样的:

$('#convenioJson').val(JSON.stringify(data.List[i]));

我的Json是这样的:

"{'Descricao':'UNIMED                   ','Id':1,'CodigoLogin':'bortolop','DataStamp':'/Date(903621226000)/'}"

但是当我提交这个表单时,我的属性"方便"是空的。在表单提交中填充这个的方法是什么?在ajax中我已经知道

如何在asp.net mvc5中从json中绑定模型属性

这不起作用,因为字符串类型无法解析为复杂对象。您应该像这样创建自定义数据索引器:

public class ConvenioViewModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ConvenioViewModel viewModel = new ConvenioViewModel() {};
        string jsonConvenio = bindingContext.ValueProvider.GetValue("convenio").AttemptedValue;
        JavaScriptSerializer jss = new JavaScriptSerializer();
        viewModel.Convenio = jss.Deserialize<Convenio>(jsonConvenio);
        return viewModel;
    }
}

在Application_Start()中添加

ModelBinders.Binders.Add(typeof(ConvenioViewModel), new ConvenioViewModelBinder());

就是这样!