2013-04-29 59 views
1

搞乱我有一个自定义模板~/Views/Shared/EditorTemplate/String.cshtml,它似乎会导致异常:MVC 4 - 字符串自定义模板与枚举

The model item passed into the dictionary is of type 'Proj.Models.EnumType', but this dictionary requires a model item of type 'System.String'. 

它似乎只发生在Enums。如果我删除模板,它也会消失。该模板似乎并没有导致它,我认为它甚至没有这么做。我可以把任何东西放在那里,例外是一样的。

因此......如果我有custom template,我可不可以使用@Html.EditorFormodelenum

一些背景:

型号:

namespace Proj.Models 
{ 

    public enum EnumType 
    { 
     A = 0, 
     B = 1, 
     C = 2, 
    } 

    public class Mod 
    { 
     [Required] 
     public String Name; 

     [Required] 
     public EnumType Letter; 
    } 

} 

查看:

@model Proj.Models.Mod 
@Html.EditorFor(m=>m) // Exception happens here 
+0

您确实需要提供比这更多的上下文。你的模型是什么样的?你的观点和模板是什么样的?你的控制器操作方法是什么样的?给我们一些东西来重现问题。 – 2013-04-29 03:54:40

+0

对不起,我添加了一些 – Andrew 2013-04-29 04:03:44

+0

那么,首先Required属性是毫无意义的,因为Enum是一个值类型,它们不能是Null,因此它们将始终有一个值,因此永远不会失败Required验证。其次,你期望EditorFor对Enum做什么?没有“枚举选择器”方法。最后,你实际上并没有提供模型类型。 – 2013-04-29 04:06:48

回答

1

以下是我发现为我工作。

在你模板,请务必声明你的模型可为空枚举类型。然后,在代码中,检查它是否有值,并基于它做适当的格式。

@inherits System.Web.Mvc.WebViewPage<Proj.Models.EnumType?> 

@{ 
    Proj.Models.EnumType v = Model.HasValue ? Model.Value : {*some-default-value*}; 

    @Html.{*Your-formatter-here*};    
}