2014-10-03 60 views
1

我有一個名爲Title的枚舉類型字段。剃刀視圖中所需的值類型字段

[Serializable] 
public enum Title 
{ 
    NotSet, 
    Miss = 4, 
    Mr = 1, 
    Mrs = 3, 
    Ms = 2 
} 

我想Title類型的Razor視圖屬性綁定,但我不希望它是一個必填字段。然而,在TabBut Out或OnBlur上,它會根據需要顯示,雖然我沒有指定這是required

有什麼辦法可以解決這個問題嗎?

+0

一個枚舉必須有一個值,這就是爲什麼它是必需的。你總是可以讓它爲空 - 「公開標題?標題{get;組; }' – 2014-10-04 10:52:58

+0

爲什麼不添加這個正確的評論作爲答案? – JotaBe 2014-10-05 16:37:00

回答

1

在模型

public Title? Titleformation { get; set; } 
    public string[] SelectedTitle { get; set; } 
在你看來

創建

namespace YourApplicationName.Helper 
    { 
    public class ModelValueListProvider : IEnumerable<SelectListItem> 
    { 
    List<KeyValuePair<string, string>> innerList = new List<KeyValuePair<string, string>>(); 
    public static readonly ModelValueListProvider TitleList = new TitleListProvider(); 
    protected void Add(string value, string text) 
    { 
     string innerValue = null, innerText = null; 

     if (value != null) 
      innerValue = value.ToString(); 
     if (text != null) 
      innerText = text.ToString(); 

     if (innerList.Exists(kvp => kvp.Key == innerValue)) 
      throw new ArgumentException("Value must be unique", "value"); 

     innerList.Add(new KeyValuePair<string, string>(innerValue, innerText)); 
    } 
    public IEnumerator<SelectListItem> GetEnumerator() 
    { 
     return new ModelValueListProviderEnumerator(innerList.GetEnumerator()); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 

    private struct ModelValueListProviderEnumerator : IEnumerator<SelectListItem> 
    { 
     private IEnumerator<KeyValuePair<string, string>> innerEnumerator; 

     public ModelValueListProviderEnumerator(IEnumerator<KeyValuePair<string, string>> enumerator) 
     { 
      innerEnumerator = enumerator; 
     } 

     public SelectListItem Current 
     { 
      get 
      { 
       var current = innerEnumerator.Current; 
       return new SelectListItem { Value = current.Key, Text = current.Value }; 
      } 
     } 

     public void Dispose() 
     { 
      try 
      { 
       innerEnumerator.Dispose(); 
      } 
      catch (Exception) 
      { 
      } 
     } 

     object System.Collections.IEnumerator.Current 
     { 
      get 
      { 
       return Current; 
      } 
     } 

     public bool MoveNext() 
     { 
      return innerEnumerator.MoveNext(); 
     } 

     public void Reset() 
     { 
      innerEnumerator.Reset(); 
     } 
    } 
    private class TitleListProvider : ModelValueListProvider 
    { 
     public TitleListProvider (string defaultText = null) 
     { 
      if (!string.IsNullOrEmpty(defaultText)) 
       Add(string.Empty, defaultText); 

      Add(Title.NotSet, "NotSet"); 
      Add(Title.Miss , "Miss"); 
      Add(Title.Mr , "Mr"); 
      Add(Title.Mrs , "Mrs"); 
      Add(Title.MS, "MS"); 


     } 
     public void Add(Title value, string text) 
     { 
      Add(value.ToString("d"), text); 
     } 
    } 
    } 
} 

,也命名空間添加到您的視圖

 @using YourApplicationName.Helper; 
    @Html.ListBoxFor(m => m.SelectedTitle , new SelectList(ModelValueListProvider.TitleList, "Value", "Text")) 

希望這對你有所幫助

-1

使用類而不是枚舉即:

public class Title 
{ 
    NotSet; 
    Miss = 4; 
    Mr = 1; 
    Mrs = 3; 
    Ms = 2; 
} 
+0

-1:除了沒有意義,這段代碼甚至沒有編譯。 – JotaBe 2014-10-05 16:36:23

0

枚舉需要值,不能爲空(也可以不設置),儘管上面有人評論過。我所做的致謝有一個「無」的枚舉成員,每當我打印出來,我只是檢查代碼,以查看枚舉值是否> 0(也就是none選項),並且不'打印它。

public enum Salutation { none, 
         [Description("Mr.")] Mr, 
         [Description("Mrs.")] Mrs, 
         [Description("Ms.")]Ms, 
         [Description("Miss")] Miss }