尝试将确认消息翻译为挪威语时,我收到以下错误:
在'System.Web.UI.WebControls.LinkButton'上的属性'OnClientClick'上不能有多个绑定。确保此属性未通过隐式表达式绑定,例如,使用meta:resourcekey。
我以下列方式使用显式本地化:
<asp:LinkButton ID="lnkMarkInvoiced" runat="server" OnClick="lnkMarkInvoiced_OnClick"
OnClientClick="<%# Resources: lnkMarkInvoicedResource.OnClientClick%>"
Visible="False" CssClass="stdtext" meta:resourcekey="lnkMarkInvoicedResource" ></asp:LinkButton>
这是本地资源文件条目:
<data name="lnkMarkInvoicedResource.OnClientClick" xml:space="preserve">
<value>return confirm('Er du sikker?');</value>
如果我删除元属性,我会得到英文文本(默认)。 如何在不使用背后的代码的情况下显示挪威文本?
更新
删除meta属性可防止发生异常,但原始问题仍然存在。我无法显示挪威文字。
仅显示默认的英文文本。
另一个更新:
我知道这个问题已经老了,但我仍然无法显示挪威文字。 如果有人有一些提示,请发表回复。
答案 0 :(得分:1)
您是否使用.NET资源管理器和附属程序集来存储本地化资源?看起来您已经在标记中硬编码了替代语言,而不是将其存储在特定于语言的资源程序集中......
.NET具有一些非常丰富的本地化和全球化功能。如果你正确使用它们,本地化应该是一个非常自动的东西(假设你的客户端提供他们的语言代码作为HTTP标头的一部分)。即使您的客户端没有使用适当的语言配置浏览器,通过用户请求(单击标志图标,配置设置等)手动更改UI文化仍然很容易。
这篇文章可能会有帮助:ASP.NET Web Page Resources Overview
答案 1 :(得分:1)
看起来你通过内联onclick使问题变得更难。为什么不将它拆分成一个单独的行?
<script>
function markInvoiced()
{
return confirm('<%= Resources.SomehowGet.lnkMarkInvoicedResource.OnClientClick%>');
}
</script>
<asp:LinkButton ID="lnkMarkInvoiced" runat="server" OnClick="lnkMarkInvoiced_OnClick"
OnClientClick="return markInvoiced();"
Visible="False" CssClass="stdtext" meta:resourcekey="lnkMarkInvoicedResource" ></asp:LinkButton>
在我们查看您的代码时,您意识到您实际上构建的是&lt; a&gt;标签,对吗?因此,为什么不建立一个&lt; a&gt;并为自己保留一些悲伤?
最后,下一个项目为什么不放弃内置的ASP.NET本地化nighmare而选择像FairlyLocal那样的理智,在这种情况下你会写下这个:
<a href="#" onclick="return confirm(<%=_"really?"%>) onserverclick="lnkMarkInvoiced_OnClick" runat="server">
<%=_("Mark Invoice")%>
</a>
答案 2 :(得分:0)
当您在OnClientClick中使用显式本地化时,该元标记正在使用隐式本地化。您需要选择一种方法或另一种方法。如果要使用显式本地化,则需要进行必要的工作,以便在代码隐藏中在应用程序中设置正确的文化信息。