如何解决如何重用为保存选择列表项而创建的代码
|| 我有以下代码是MVC中的视图模型public class adminQviewmodel
{
public SubTopic SubTopic { get; set; }
public Answer Answer { get; set; }
public string Status { get; set; }
[displayName(\"Status\")]
public IEnumerable<SelectListItem> StatusType
{
get
{
return new[]
{
new SelectListItem { Value = \"0\",Text = \"Release\" },new SelectListItem { Value = \"1\",Text = \"Beta\" },new SelectListItem { Value = \"2\",Text = \"Alpha\" },new SelectListItem { Value = \"3\",Text = \"Draft\" },};
}
}
}
在检索值并显示等效文本时,我在其他地方使用了值和文本的相同组合。有什么办法可以封装value的组合:texzt并在其他地方使用它,并将其用于我的选择下拉列表?
一个示例是当我返回视图中显示的数据时。数据包含状态代码的值,例如0、1,2和3。但是,我想显示文本值。我可以创建另一个查找或硬编码,但是然后我将复制数据存储在两个不同位置的方式。
解决方法
我建议您在视图中使用SelectLists和辅助方法
@Html.DropDownListFor(m => m.Status,new StatusSelectList())
。
public class StatusSelectList : SelectList
{
private static Dictionary<int,string> data = new Dictionary<int,string>
{
{ 0,\"Release\" },{ 1,\"Beta\" },{ 2,\"Alpha\" },{ 3,\"Draft\" }
};
public StatusSelectList()
: base(data,\"Key\",\"Value\")
{
}
}
更新:
显示当前状态值的标签:
使用UIHint属性“ѭ3”装饰视图模型中的属性。
将选择列表设置为ViewBag.SelectLists = new Dictionary<string,SelectList> { \"Status\",new StatusSelectList() };
用@Html.DisplayFor(m => m.Status)
显示当前状态值的标签。
, 您可以在私有属性中设置一次,然后在以后的每个请求中将其返回。这称为延迟加载:
private IEnumerable<SelectListItem> _statusType;
[DisplayName(\"Status\")]
public IEnumerable<SelectListItem> StatusType
{
get
{
if (_statusType == null)
{
_statusType = new[] {
new SelectListItem { Value = \"0\",Text = \"Release\" },new SelectListItem { Value = \"1\",Text = \"Beta\" },new SelectListItem { Value = \"2\",Text = \"Alpha\" },new SelectListItem { Value = \"3\",Text = \"Draft\" },};
}
return _statusType;
}
}
另外,如果您要在不同的用户会话之间重用同一列表,则可以将其设置为静态属性,这样它就可以实例化一次并一直存在,直到应用程序池被回收/重新启动为止。
更新:
您可以使用一点LINQ来检索所需的文本。例如,要基于值2获取\“ Alpha \”:
string text = StatusType.SingleOrDefault(s => s.Value == \"2\");
, 编写一个自定义类:
public class StatusType : IEnumerable<KeyValuePair<int,string>>
{
private readonly List<KeyValuePair<int,string>> entries = new List<KeyValuePair<int,string>>();
public void Add(int key,string value)
{
this.entries.Add(new KeyValuePair<int,string>(key,value));
}
public string this[int key]
{
get
{
foreach (var kvp in this.entries)
{
if (string.Compare(kvp.Key,key,StringComparison.Ordinal) == 0)
{
return kvp.Value;
}
}
return null;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。