Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates MVC4-字符串自定义模板与枚举混淆_Templates_Asp.net Mvc 4_Razor_Enums - Fatal编程技术网

Templates MVC4-字符串自定义模板与枚举混淆

Templates MVC4-字符串自定义模板与枚举混淆,templates,asp.net-mvc-4,razor,enums,Templates,Asp.net Mvc 4,Razor,Enums,我有一个自定义模板~/Views/Shared/EditorTemplate/String.cshtml,它似乎导致了异常: The model item passed into the dictionary is of type 'Proj.Models.EnumType', but this dictionary requires a model item of type 'System.String'. 这似乎只发生在enum上。如果我删除模板,它也会消失。模板似乎并没有导致它,我认为它

我有一个自定义模板
~/Views/Shared/EditorTemplate/String.cshtml
,它似乎导致了异常:

The model item passed into the dictionary is of type 'Proj.Models.EnumType', but this dictionary requires a model item of type 'System.String'.
这似乎只发生在
enum
上。如果我删除模板,它也会消失。模板似乎并没有导致它,我认为它甚至没有达到那个程度。我可以在里面放任何东西,例外情况也是一样的

所以。。。如果我有一个
自定义模板
,我不能将
@Html.EditorFor
模型
枚举一起使用吗

一些背景:

型号:

namespace Proj.Models
{

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

    public class Mod
    {
      [Required]
      public String Name;

      [Required]
      public EnumType Letter;
    }

}
视图:


这是我发现对我有用的东西

模板中,确保将模型声明为可为空的枚举类型。然后,在代码中,检查它是否有值,并根据该值进行适当的格式化

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

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

    @Html.{*Your-formatter-here*};            
}
@继承System.Web.Mvc.WebViewPage
@{
Proj.Models.EnumType v=Model.HasValue?Model.Value:{*某些默认值*};
@Html.{*您的格式化程序在这里*};
}

以下是我找到的适合我的工作

模板中,确保将模型声明为可为空的枚举类型。然后,在代码中,检查它是否有值,并根据该值进行适当的格式化

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

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

    @Html.{*Your-formatter-here*};            
}
@继承System.Web.Mvc.WebViewPage
@{
Proj.Models.EnumType v=Model.HasValue?Model.Value:{*某些默认值*};
@Html.{*您的格式化程序在这里*};
}

您确实需要提供更多的上下文。你的模特长什么样?您的视图和模板是什么样子的?您的控制器操作方法是什么样子的?首先,必需的属性是没有意义的,因为枚举是一种值类型,它们不能为Null,因此它们总是有一个值,因此永远不会通过必需的验证。其次,您希望EditorFor对枚举做什么?没有“枚举选择器”方法。最后,您实际上没有提供模型类型。@MystereMan:我认为
Mod
类就是模型。我有客户端验证所需的数据。如果没有模板,它只会显示一个文本框,我可以在其中输入我想要的名称。这不是它的工作方式。您不能输入枚举的名称并让它神奇地工作。枚举实际上是一个int(这就是它的值为0、1、2等的原因)。您的EditorTemplate正在使用字符串。。如果Mod是您的模型,那么您应该指定Mod是您的模型,而不是将@model留空。至于必填字段,你没有听我说。枚举是一种值类型。它不能为null,因此验证是无意义的。如果将字段保留为空,它仍将包含默认值,验证不会失败。但是,最终结果是MVC不会将枚举解析为其文本表示形式。如果你想这样做,你必须自己写代码。看看这样的例子:你真的需要提供更多的上下文。你的模特长什么样?您的视图和模板是什么样子的?您的控制器操作方法是什么样子的?首先,必需的属性是没有意义的,因为枚举是一种值类型,它们不能为Null,因此它们总是有一个值,因此永远不会通过必需的验证。其次,您希望EditorFor对枚举做什么?没有“枚举选择器”方法。最后,您实际上没有提供模型类型。@MystereMan:我认为
Mod
类就是模型。我有客户端验证所需的数据。如果没有模板,它只会显示一个文本框,我可以在其中输入我想要的名称。这不是它的工作方式。您不能输入枚举的名称并让它神奇地工作。枚举实际上是一个int(这就是它的值为0、1、2等的原因)。您的EditorTemplate正在使用字符串。。如果Mod是您的模型,那么您应该指定Mod是您的模型,而不是将@model留空。至于必填字段,你没有听我说。枚举是一种值类型。它不能为null,因此验证是无意义的。如果将字段保留为空,它仍将包含默认值,验证不会失败。但是,最终结果是MVC不会将枚举解析为其文本表示形式。如果你想这样做,你必须自己写代码。参见以下示例: