Asp.net mvc 3 如何使用Razor将DropDownList项目国际化

Asp.net mvc 3 如何使用Razor将DropDownList项目国际化,asp.net-mvc-3,drop-down-menu,Asp.net Mvc 3,Drop Down Menu,我们正在开发一个MVC网站,其中一些列表包含用户和系统值。因此,系统项需要国际化才能以用户语言显示,并且用户项已经以用户语言显示 这些系统项有一个名为“IsSystem”的标志,用于区分我们需要国际化的系统项。此标志还表示用户无法更新或删除这些项目 好的,我们正在使用@Html.DropDownList来呈现这个DropDownList。。。所以我不知道如何在DROPPDLIST加载逻辑的中间…为了放置if语句,请检查IsSystem标志并从资源文件中获取正确的文本 谢谢你对如何处理这件事有任何

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

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

好的,我们正在使用
@Html.DropDownList
来呈现这个DropDownList。。。所以我不知道如何在DROPPDLIST加载逻辑的中间…为了放置
if
语句,请检查
IsSystem
标志并从资源文件中获取正确的文本

谢谢你对如何处理这件事有任何想法

编辑:

控制器代码:

@Html.DropDownList("idTaskType", String.Empty)
ViewBag.idTaskType=新建选择列表(db.TaskTypes,“idTaskType”,“Name”)

其中
db
是EntityFramework中的上下文

查看代码:

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

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

ViewBag.idTaskType = new SelectList(db.TaskTypes
   .Where(x => x.language == "en"), "idTaskType", "Name");
我想象你的“任务类型”表如下

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

让我们考虑两种不同的“AppGun资源”< /P> [1] 恩美

Name    Value
----    -----
Task1   Create  
Task2   Update
Task3   Delete
[1] sv

现在开发一个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()
                    });
        } 
    }

谢谢。

请在您填写DropDownList数据的地方张贴代码。这不是我当前的场景。。。因为我只需要翻译带有真IsSystem标志的TaskType。。。其他值需要在用户输入时保留。但我想我应该在其中加入一些LINQ逻辑。@Romias-我不明白你的意思。只需将isSystem检查添加到linq查询中。数据库中没有翻译。。。TaskType表只有“Name”和“IsSystem”。当TaskType由用户拥有时,名称应保持不变。。。但是,如果TaskType是buildin(由系统所有),则需要将Name属性替换为来自资源文件的翻译。@Romias-将一个翻译放在数据库中,另一个放在资源文件中有点傻。通常,资源文件使用ID存储字符串,因此您需要某种方法将原始字符串映射到ID,然后在资源文件中查找,然后将其添加到SelectList。有些数据是从数据库中提取的,有些是从资源文件中提取的,这确实是一个糟糕的设计。。。该表将内置5-10项(标记为IsSystem)。。。其他数百项将是用户数据,无需翻译。所以,在db表中添加列来处理10个项目的转换是一种过分的做法。这就是为什么我最终选择了这个设计。
@Html.DropDownList("idTaskType", new SelectList(Model.TaskTypeList, "Value", "Text"), String.Empty)