从ModelMetadata获取属性的值

时间:2014-11-18 17:40:11

标签: c# asp.net-mvc umbraco

我正在尝试实现自定义ModelBinder重载以下创建方法,以允许我绑定到抽象类。

protected override object CreateModel(ControllerContext controllerContext, 
                                      ModelBindingContext bindingContext, 
                                      Type modelType){

  const string WidgetId = "WidgetId";
  ValueProviderResult widgetIdResult = bindingContext.ValueProvider
                                                     .GetValue(WidgetId);

  if (widgetIdResult == null)
  {
    throw new Exception("Widget id for abstract class not specified.");
  }

  IWidget widget = 
  (IWidget)ContentHelper.GetNodeById(int.Parse(widgetIdResult.AttemptedValue));

  IRenderWidget instance = 
                widget.BuildViewModel(ConverterHelper.Instance.UmbracoHelper);

  bindingContext.ModelMetadata = 
  ModelMetadataProviders.Current
                        .GetMetadataForType(() => instance, instance.GetType());
  return instance;
}   

使用上面的代码,我能够成功创建一个继承我的抽象类型的类的实例。

我不能做的是从表单中填充具有属性表单的模型的值。一旦我到达我的ActionResult,表单值为空。

public ActionResult SubmitForm(RenderModel model,
[ModelBinder(typeof(FormWidgetModelBinder))]RenderFormBase form)

使用TryUpdate

this.TryUpdateModel(form);

不起作用。

有人可以演示如何绑定表单值吗?

更新

如果我使用评论中链接的示例,我会收到以下错误。

  

参数字典包含参数的无效条目   'form'用于方法'System.Web.Mvc.ActionResult   SubmitForm(Umbraco.Web.Models.RenderModel,   Site.Models.ViewModels.DocumentTypes.Widgets.RenderFormBase)'in   'Site.Controllers.WidgetPageController'。这本词典包含一个   类型的价值   'Site.Models.ViewModels.DocumentTypes.Widgets.RenderContactUs',但   该参数需要值类型   'Site.Models.ViewModels.DocumentTypes.Widgets.RenderFormBase'。   参数名称:参数

0 个答案:

没有答案
相关问题