繁体   English   中英

如何从ASP.NET MVC5中的JSON绑定模型中的属性

[英]How bind property in model from json in asp.net mvc5

我在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”为空。 在表单提交中填充此内容的方式是什么? 在阿贾克斯我已经知道

它不起作用,因为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());

就这样!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM