2013-04-29 25 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*};    
}