最終目標是序列化 my 中的類型以供 my 使用。abstractViewController我的抽象類型有一個屬性,其名稱對應于具體派生類型的名稱;這就是我將如何確定要選擇哪種具體類型。其值是通過反射在抽象類型的構造函數中設置的:enumenum[JsonConverter(typeof(BlockJsonConverter)]public abstract class Block{ [NotMapped, JsonProperty] public BlockType BlockType {get; set;} public string Name {get;set:} public int Height{get;set;} public int Width {get;set;} public int Depth {get;set;} protected Block(){ BlockType = Enum.TryParse(GetType().Name, out BlockType blocktype) ?? blocktype : BlockType.Unknown }}public enum BlockType { Long, Short, Tall, Unknown}public class Long : Block { /*...*/ }public class Short : Block { /*...*/ }public class Tall : Block { /*...*/ }public class Unknown : Block { /*...*/ }該類由實體框架使用,但該屬性未存儲在數據庫中,因此該屬性用該特性標記;但是,由于我希望將屬性從視圖輪跳到控制器,因此我已使用該屬性對其進行了標記。BlockBlockTypeBlockType[NotMapped][JsonProperty]我已經創建了一個來處理從視圖到控制器的反序列化:TestModelBinderpublic class TestModelBinder : DefaultModelBinder{ protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { return base.CreateModel(controllerContext, bindingContext, GetModelType(controllerContext, bindingContext, modelType)); } protected override ICustomTypeDescriptor GetTypeDescriptor( ControllerContext controllerContext,ModelBindingContext bindingContext) { var modelType = GetModelType(controllerContext, bindingContext, bindingContext.ModelType); return new AssociatedMetadataTypeTypeDescriptionProvider(modelType) .GetTypeDescriptor(modelType); } private static Type GetModelType(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { if (modelType.Name == "Block") {當我碰到上面的斷點時,綁定Context在其 ValueProvider.FormValueProvider 中沒有我的 BlockType 屬性的 BlockType - 但 Name, Height, Width 和 Depth 屬性按預期列出。...幫助程序只是生成通常的標簽,基于類型(枚舉,字符串等)和驗證消息的編輯器。枚舉的編輯器模板如下:BootstrapEditorGroupFor
1 回答

皈依舞
TA貢獻1851條經驗 獲得超3個贊
您的選擇元素似乎沒有呈現該元素。如果沒有該特性,數據將無法與模型中的相應屬性匹配。您可以通過在瀏覽器中編輯HTML并向選擇輸入添加屬性來仔細檢查它,然后嘗試發布表單以查看它是否有效。name
name
name="BlockType"
- 1 回答
- 0 關注
- 77 瀏覽
添加回答
舉報
0/150
提交
取消