微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何重用为保存选择列表项而创建的代码

如何解决如何重用为保存选择列表项而创建的代码

|| 我有以下代码是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 举报,一经查实,本站将立刻删除。