Asp.net mvc 4 Razor视图中需要值类型字段

Asp.net mvc 4 Razor视图中需要值类型字段,asp.net-mvc-4,razor,knockout.js,Asp.net Mvc 4,Razor,Knockout.js,我有一个名为Title的枚举类型字段 我想将Title类型的属性绑定到Razor视图,但我不希望它是必填字段。然而,在tab out或OnBlur上,它是按要求显示的,尽管我没有按要求指定它 有什么办法可以解决这个问题吗?使用类而不是枚举ie: public class Title { NotSet; Miss = 4; Mr = 1; Mrs = 3; Ms = 2; } 创造 namespace YourApplicationName.Helpe

我有一个名为Title的枚举类型字段

我想将Title类型的属性绑定到Razor视图,但我不希望它是必填字段。然而,在tab out或OnBlur上,它是按要求显示的,尽管我没有按要求指定它


有什么办法可以解决这个问题吗?

使用类而不是枚举ie:

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

  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"))

希望这能帮助您

枚举需要值,并且不能为null,也不能不设置,不管上面有人怎么评论。对于称呼,我要做的是让枚举中有一个none成员,每当我打印出它时,我只需检查代码,看看枚举的值是否大于0,即none选项,并且不打印它

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

枚举必须有一个值,这就是为什么它是必需的。你总是可以使它为空-公共标题?Title{get;set;}为什么不添加这个正确的注释作为答案?-1:除了没有意义之外,这段代码甚至不编译。
     @using YourApplicationName.Helper;
  @Html.ListBoxFor(m => m.SelectedTitle , new SelectList(ModelValueListProvider.TitleList, "Value", "Text"))
public enum Salutation { none, 
                         [Description("Mr.")] Mr, 
                         [Description("Mrs.")] Mrs, 
                         [Description("Ms.")]Ms, 
                         [Description("Miss")] Miss }