Asp.net mvc 4 Razor视图中需要值类型字段
我有一个名为Title的枚举类型字段 我想将Title类型的属性绑定到Razor视图,但我不希望它是必填字段。然而,在tab out或OnBlur上,它是按要求显示的,尽管我没有按要求指定它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
有什么办法可以解决这个问题吗?使用类而不是枚举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 }