2012-04-25 11 views
0

私はカスタムバインダーを書きましたが、実行できないようです。 }asp .net mvcカスタムモデルのバインドに失敗しました

[System.Web.Http.HttpPost] 
public HttpResponseMessage Create(IList<SlideContent> l) 
     { 

... :私は私のglobal.asax.csにこれを追加

public abstract class SlideItem 
{ 
    public string PlaceHolderName { get; set; } 
    public uint PlaceHolderID { get; set; } 
    public uint ItemType { get; set; } 
} 

public class TitleSlideItem : SlideItem 
    { 
     ... 

     public TitleSlideItem() 
     { 
      ItemType = 1; 
     } 
    } 



public class ParagraphSlideItem : SlideItem 
{ 
    ... 
    public ParagraphSlideItem() 
    { 
     ItemType = 2; 
    } 
} 

public class SlideItemBinder : IModelBinder 

{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 

     System.Diagnostics.Trace.WriteLine("BindModel is working"); 

     var values = (ValueProviderCollection)bindingContext.ValueProvider; 
     var placeHolderName = (string)values.GetValue("PlaceHolderName").ConvertTo(typeof(string)); 
     var placeHolderID = (uint)values.GetValue("PlaceHolderID").ConvertTo(typeof(uint)); 
     var itemType = (uint)values.GetValue("ItemType").ConvertTo(typeof(uint)); 
     switch (itemType) 
     { 
      case 1: 
       System.Diagnostics.Trace.WriteLine("TitleSlideItemBinder"); 
       return (SlideItem)new TitleSlideItem { PlaceHolderName = placeHolderName }; 
      case 2: 
       System.Diagnostics.Trace.WriteLine("ParagraphSlideItem"); 
       return (SlideItem)new ParagraphSlideItem { PlaceHolderName = placeHolderName }; 
      case 3: 
       System.Diagnostics.Trace.WriteLine("TextSlideItem"); 
       return (SlideItem)new TextSlideItem { PlaceHolderName = placeHolderName }; 
      case 4: 
       System.Diagnostics.Trace.WriteLine("PictureSlideItem"); 
       return (SlideItem)new PictureSlideItem { PlaceHolderName = placeHolderName }; 
      default: 
       System.Diagnostics.Trace.WriteLine("this should never-ever-ever-ever happen"); 
       //this should never-ever-ever-ever happen 
       return (SlideItem)new TextSlideItem { PlaceHolderName = placeHolderName }; 
     }   
    } 
} 

:ここに は私のコードです

 ModelBinders.Binders.Add(new KeyValuePair<Type, IModelBinder>(typeof(SlideItem), new SlideItemBinder()));   

しかし、私はこれを実行しようとすると、

私はまだSystem.MissingMethodExceptionというメッセージが表示されます:抽象クラスを作成できません

どこが間違っていますか?

敬具、

Zoli

答えて

0

このlink.youがここで解決策を見つけるかもしれないチェック:ASP.NET MVC 2 - Binding To Abstract Model

答えはカスタムモデルバインダーを持っています。

+0

これもやっていますが、私は同じ結果を得ました –

関連する問題