将TextBoxFor绑定到Dictionary <cultureinfo,string =“”>的值以进行本地化

时间:2016-11-04 11:18:58

标签: c# asp.net-mvc razor

在ASP.NET MVC 5 Web应用程序中,我的模型中有一个Title字符串属性,很容易绑定到TextBoxFor

但是,由于本地化需求,我将Title属性转换为Dictionary<CultureInfo, string>。我已经阅读了网络,我可以将TextBoxFor绑定到Model.Title[new CultureInfo("en-US")]

问题#1:我在假设我还可以绑定到Model.Title[Model.CurrentLanguage](或其他包含相关CultureInfo的变量)时,我是否正确?

当没有本地化时,主要问题就出现了,即我第一次要求进行定位。字典尚未包含密钥,因此绑定失败并出现异常。

问题2:如何管理丢失的密钥案例?我知道我可以预先填充字典中所有需要的文化,其中包含空字符串或空字符串,但我真的不愿意这样做,因为它会消除灵活性,并且它会在每个字典中创建许多条目,而我可能只需要一个或二。

修改 也许从问题中不清楚,但我所谈论的本地化是用户数据,并将从/向数据库读/写。它们不是应用程序资源。

2 个答案:

答案 0 :(得分:0)

IMO我会进入资源文件而不是字典的本地化方式。就像这里:https://docs.asp.net/en/latest/fundamentals/localization.html

通过这种方式,即使你没有,让我们说,本地化字符串的fr版本(没有xxx.fr.resx文件),它将返回默认字符串(这将是主资源文件中的那个 - 没有文化的那个 - xxx.resx)

答案 1 :(得分:0)

对我来说,看起来你在错误的地方做决策。您应该在控制器中进行文化/标题选择,并仅将您需要的内容传递给视图,而不是传递包含不同文化标题的字典。然后,您可以绑定到String标题。