尝试在Web API之上构建SPA应用程序我遇到了一个问题。 在我的项目中,我使用Resource.resx文件来本地化显示的信息。 当我以.cshtml格式创建视图时,这不是问题,但是当我使用Knockout模板时,我遇到了问题,因为它们是.html,我无法再直接访问Resource.resx。
我认为有几个选项,包括从Web API发送本地化字符串和模型,在.cshtml文件中创建javascript变量并在.html中访问它们并创建一个javascript本地化文件(包含常量,或从.resx获取值。
任何人都对如何解决这个问题有任何好的想法?
编辑: 好吧,我能想到的两个最可行的解决方案是在.cshtml文件中打印本地化字符串,如下所示:
@functions{
public string LocalizedString()
{
return Resource.MyLocalizedString;
}
}
<input id="LocalizedString" type="hidden" value="@LocalizedString()" />
然后使用jquery和输入的id
获取值$("#LocalizedString").val()
所以我可以填充一个我可以在应用程序中引用的localized.js文件。
另一个选择是创建一个wep api服务,该服务提供我在我的应用程序中需要的字符串的json列表。
public HttpResponseMessage Get()
{
var localString = new Dictionary<string, string> {
{"FullName", Resource.ACC_FullName},
{"LastName", Resource.ACC_LastName},
{"FirstName", Resource.ACC_FirstName}
};
return Request.CreateResponse(HttpStatusCode.OK, localString);
}
女巫将返回此JSON
{
fullName: "Fullt navn",
lastName: "Etternavn",
firstName: "Fornavn"
}
然后可以将其存储在localstorage中(我知道初始问题与淘汰相关,这个代码是angularjs,但我知道你可以用类似的东西进行淘汰)
gets(): void {
this.http({ method: 'GET', url: '/api/locals' }).
success(function (data, status, headers, config) {
angular.forEach(data, function (value, key) {
localStorage.setItem(key, value);
});
}).
error(function (data, status, headers, config) {
this.$log.warn(data, status, headers, config);
});
}
然后可以使用在页面上使用
localStorage.getItem('Key')
编辑:在AngularJS的情况下,您可以使用内置缓存的$ http,非常聪明。
第一个解决方案可能会使DOM中的变量更快,至少在脚本执行时它们会存在,但我不喜欢用我真正应该存在的东西来混淆我的html的想法。 另一个解决方案清理html,但我必须进行api调用才能获取值,并且这些值将无法使用,直到返回该调用。女巫意味着我可能需要延迟依赖于那些值的脚本的执行,直到完成为止。但是响应不会很大,我们总共说了50到100个字符串(对于我的网站至少)。
现在,我还没有实现任何这些解决方案,我不知道它们是否有任何好处。所以,如果有人有任何意见或想法,我想听听他们。
答案 0 :(得分:0)
我有类似的问题。由于我没有使用Knockout.js的经验,我不确定它是否对您有所帮助。我在我的资源文件中有一个名为Test的字符串,我可以使用我的cshtml中的以下代码行在前端显示它:
@Html.Raw(WmsWebMvcProto.Properties.Resources.Test)