如何使用Razor国际化DropDownList项目

问题描述:

我们正在研究MVC网站,其中一些列表具有用户和系统值。因此,系统项目需要国际化以用户语言显示,并且用户项目已经以用户语言显示。如何使用Razor国际化DropDownList项目

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

好了,我们正在使用@Html.DropDownList呈现此DropDownList的......所以我不觉得如何介入下拉列表加载逻辑的中间...为了放置if语句检查的IsSystem标志和获取来自资源文件的正确文本。

感谢如何处理这个任何想法...

编辑:

控制器代码:

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

其中db是的EntityFramework

上下文

查看代码:

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

请将代码填入您的DropDownList数据中。 – Marc

我想象你的 “TaskTypes” 表如下

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

让我们考虑两种不同的 “App_GlobalResources文件”

[1]恩美国

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) 

感谢。

您将需要已经国际化数据的版本。所以,你可以做这样的事情:

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

这不是我目前的情况......因为我只需要翻译具有标志IsSystem的TaskType,所以其他值需要在用户输入时保留。但我想我应该添加一些LINQ逻辑。 – Romias

+0

@罗米亚斯 - 我不明白你的意思。只需将isSystem检查添加到linq查询。 –

+0

我没有数据库中的翻译... TaskType表只有“Name”和“IsSystem”。当用户拥有TaskType时,名称应该保持不变...但是如果TaskType是buildin(由系统拥有),则需要使用来自资源文件的翻译替换Name属性。 – Romias