c# – MVC 3.0 ModelBinder bindingContext.ValueProvider.GetVa
我是新的使用自定义的ModelBinders,我一直在寻找,我找不到与这个具体情况相关的任何帖子.
我有一个实体: public class DynamicData { public IList<DynamicDataItem> DynamicDataItems{get;set;} } 在视图中我绑定如下: @Html.EditorFor(model => model.DynamicDataItems); 我在DynamicDataItems类中有特殊的信息,我想以特定的方式检索,所以我创建了自己的模型绑定器. public class DynamicDataItemBinder : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { var key = bindingContext.ModelName; var valueProviderResult = bindingContext.ValueProvider .GetValue(key); if (valueProviderResult == null || string.IsNullOrEmpty(valueProviderResult .AttemptedValue)) { return null; } //Here retrieve my own Information return DynamicDataItem; } } bindingContext.ModelName包含“DynamicDataItem [0]”. 如果我做bindingContext.ValueProvider.ContainsPrefix(key),它返回true,但是当我执行GetValue(key)时,它返回null. var result1= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Id"); var result2= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Name"); 我将非常感谢您能给予我的任何指导. 解决方法
这个问题似乎是你试图将类型为DynamicDataItem的对象绑定到一个输入.由于DynamicDataItem不是字符串或其他一些基本类型,所以没有一个简单的方式来解析您的输入,并返回null.
假设类DynamicDataItem具有自己的属性,你想要做的是为DynamicDataItem的每个属性提供编辑器.如果您想要做的只是从视图传递一个绑定的子对象集合的模型,则甚至不需要自定义模型绑定.我想你想要的是你看来更像这样的东西 <input type="text" name="DynamicDataItem[0].SomeTextField" /> <input type="text" name="DynamicDataItem[0].SomeOtherTextField" /> 查看Phil Haack和Scott Hanselman的话题 Here 我希望有所帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |