如何使用Razor国际化DropDownList项目

时间:2011-10-22 14:39:49

标签: asp.net-mvc-3 drop-down-menu

我们正在开发一个MVC网站,其中一些列表包含用户和系统值。因此,系统项目需要国际化以用户语言显示,用户项目已经是用户语言。

这些系统项目有一个名为“IsSystem”的标记,用于区分我们需要国际化的标记。此标志还表示用户无法更新或删除这些项目。

好吧,我们正在使用@Html.DropDownList来渲染这个DropDownList ...所以我找不到如何在dropdownlist加载逻辑的中间步骤...以便放置if语句检查IsSystem标志并从资源文件中获取正确的文本。

感谢您对如何处理此问题的想法...

编辑:

控制器代码:

ViewBag.idTaskType = new SelectList(db.TaskTypes, "idTaskType", "Name");

其中db是来自EntityFramework的上下文

查看代码:

@Html.DropDownList("idTaskType", String.Empty)

2 个答案:

答案 0 :(得分:2)

我想象你的“TaskTypes”表格如下

idTaskType  Name
----------  -----
1           Task1
2           Task2
3           Task3

让我们考虑两个不同的“App_GlobalResources”

[1]的en-US

Name    Value
----    -----
Task1   Create  
Task2   Update
Task3   Delete

[1] SV

Name    Value
----    -----
Task1   Skapa
Task2   Uppdatera
Task3   Ta bort

现在开发一个IEnumerable SelectListItem

public IEnumerable<SelectListItem> TaskTypeList { 
        get{
            List<TaskTypes> List = db.TaskTypes.ToList();
            return List.Distinct().OrderBy(x => x.Name).Select(x => new SelectListItem
                    {
                        Value = x.idTaskType.ToString(), 
                        Text = (HttpContext.GetGlobalResourceObject("Task", x.Name)).ToString()
                    });
        } 
    }

最后使用

@Html.DropDownList("idTaskType", new SelectList(Model.TaskTypeList, "Value", "Text"), String.Empty)

感谢。

答案 1 :(得分:0)

您需要拥有数据的国际化版本。所以,你可以这样做:

ViewBag.idTaskType = new SelectList(db.TaskTypes
   .Where(x => x.language == "en"), "idTaskType", "Name");