【问题标题】:Unable to edit item of a SelectListItem无法编辑 SelectListItem 的项目
【发布时间】:2012-12-07 02:51:54
【问题描述】:

我有一个这样的对象:

public class AppointmentStatus 
{
     public int Id {get;set;}
     public string I18NKey {get;set;}
}

I18NKey 是指翻译的密钥。

在我的表单中,我使用选择列表创建了一个下拉列表:

Html.DropDownListFor(x=>x.Id, new SelectList(MyListOfStatus, "Id","I18NKey")

这样我将键的值作为文本检索,我想编辑每个 SelectListItem 中的属性文本。

我用过这样的东西:

public static SelectList TranslateValue(SelectList list)
    {
        foreach (var tmp in list)
        {
            tmp.Text = I18nHelper.Message(tmp.Text);
        }
        return list;
    }

但它没有任何改变! Text 属性仍然相同,为什么?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 selectlistitem


    【解决方案1】:

    我终于找到了解决方案:SelectList 似乎基于它需要的 IEnumerable。 每个 SelectListItem 的 Text 属性都是动态的,并且依赖于 IEnumerable 的每个项目。

    我们需要更改 IEnumerable,而不是 SelectList

    我最终做了什么:

    public class AppointmentStatus 
    {
         public int Id {get;set;}
         public string I18NKey {get;set;}
         public string Translation {get;set;}
    }
    
    public static IEnumerable<AppointmentStatus> TranslateValue(IEnumerable<AppointmentStatus> list)
        {
            foreach (var tmp in list)
            {
                tmp.Translation = I18nHelper.Message(tmp.I18NKey);
            }
            return list;
        }
    
    Html.DropDownListFor(x=>x.Id, new SelectList(HelperClass.TranslateValue(MyListOfStatus), "Id","Translation")
    

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      您需要在下拉菜单中更改绑定:

      Html.DropDownListFor(x => x.Id, 
             TranslateValue(new SelectList(MyListOfStatus, "Id","I18NKey"))
      

      还要检查您的 I18nHelper.Message 是否按预期工作。

      【讨论】:

      • 这是我试过的,是的,I18NHelper.Message 就像一个魅力
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多