2013-07-07 140 views
3

我在工具上工作,所以我可以保持組織在遊戲中的東西。多選擇枚舉

這是我的課:

//The item 
public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Value { get; set; } 
    public ItemLabel Label { get; set; } 
    public ItemType Type { get; set; } 
    public ItemTradeType TradeType { get; set; } 
    public Trade Trade { get; set; } 
} 

Label/Type/TradeType/Trade是枚舉。

查看:

@model EveMonitorV2.Models.Item 

@{ 
    ViewBag.Title = "AddItem"; 
} 

<h2>AddItem</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Item</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Value) 
     </div> 

//What should be done here? 

     <div class="editor-field"> 
      @Html.EditorFor(model => model.Value) 
      @Html.ValidationMessageFor(model => model.Value) 
     </div> 


     <div class="editor-label"> 
      @Html.LabelFor(model => model.Trade) 
     </div> 
     <div class="editor-field"> 
      @Html.CheckBoxFor() 
      @Html.ValidationMessageFor(model => model.Trade) 
     </div> 


     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

枚舉有可能整個列表,我想打一個項目創建視圖

我碰到的問題:

我希望能夠到從枚舉中選擇更多選項。 (Like this) 其中類別是我的枚舉。

這是可能的所有在asp.net mvc 4?

(小注:我還是個學生,但它不是一個學校項目)

+1

您可以使用System.Enum類來獲取Enum的名稱和值(例如, http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx)。循環播放這些內容併爲每個值創建一個Html.CheckBox。 – kevingessner

+0

謝謝@kevingessner我會檢查出來的 – JochemQuery

回答

8

創建視圖\共享\ EditorTemplates \ Options.cshtml

@using System.ComponentModel.DataAnnotations 
@using System.Reflection 
@model Enum 
@{ 
    var name = ViewData.TemplateInfo.HtmlFieldPrefix; 
    var type = Model.GetType(); 
} 

@foreach (Enum e in Enum.GetValues(type)) 
{ 
    var display = type.GetField(e.ToString()).GetCustomAttribute<DisplayAttribute>(); 
    if (display != null && (display.GetAutoGenerateField() ?? true)) 
    { 
    <label class="checkbox" title="@display.GetDescription()"> 
     <input type="checkbox" name="@name" value="@e.ToString()" checked="@Model.HasFlag(e)" /> 
     @display.Name 
    </label> 
    } 
} 
您的枚舉可以被描述爲

下一頁:

[Flags] 
public enum MyOptions 
{ 
    [Display(AutoGenerateField = false)] 
    None = 0, 
    [Display(Name = "Option 1 name")] 
    Opt1 = 1 << 1, 
    [Display(Name = "Option 2 name")] 
    Opt2 = 1 << 2, 
    [Display(Name = "Option 3 name")] 
    Opt3 = 1 << 3, 
} 

比,使用:

<div class="editor-field"> 
     @Html.LabelFor(m => m.Trade) 
     @Html.EditorFor(m => m.Trade, "Options") 
    </div>