如何在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中我已经知道
这不起作用,因为字符串类型无法解析为复杂对象。您应该像这样创建自定义数据索引器:
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());
就是这样!