如何在asp.net mvc5中绑定json中的属性

时间:2016-10-25 11:40:59

标签: c# jquery razor asp.net-mvc-5

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

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)/'}"

但是当我提交此表格时,我的财产" Convenio"一片空白。 在表单提交中填充此内容的方法是什么?在ajax                                           我已经知道了

1 个答案:

答案 0 :(得分:2)

它不起作用,因为String类型无法解析为复杂对象。你应该创建这样的自定义数据手册:

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());

这就是全部!