我们正在开发一个MVC网站,其中一些列表包含用户和系统值。因此,系统项目需要国际化以用户语言显示,用户项目已经是用户语言。
这些系统项目有一个名为“IsSystem
”的标记,用于区分我们需要国际化的标记。此标志还表示用户无法更新或删除这些项目。
好吧,我们正在使用@Html.DropDownList
来渲染这个DropDownList ...所以我找不到如何在dropdownlist加载逻辑的中间步骤...以便放置if
语句检查IsSystem
标志并从资源文件中获取正确的文本。
感谢您对如何处理此问题的想法...
编辑:
控制器代码:
ViewBag.idTaskType = new SelectList(db.TaskTypes, "idTaskType", "Name");
其中db
是来自EntityFramework的上下文
查看代码:
@Html.DropDownList("idTaskType", String.Empty)
答案 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");