在自定义服务器控件asp中使用.resx && .resource文件
我编写自己的服务器端控件并使用在.resx文件中存储的图像。在控制台应用程序中,此代码可以正常工作:
ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx"); foreach (DictionaryEntry d in rsxr) { Console.WriteLine(d.Key.ToString() + ":t" + d.Value.ToString()); } rsxr.Close();
但在这里
protected override void RenderContents(HtmlTextWriter output) { ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx"); base.RenderContents(output); foreach (DictionaryEntry d in rsxr) { output.Write(d.Key.ToString()); } }
我感到很恐怖:
找不到文件’C: Program Files Common Files Microsoft Shared DevServer 10.0 Resource1.resx’
我尝试使用ResourceManager,但它需要.resource文件。 我无法访问resgen工具(命令promt不理解[resgen]命令)并安装它(发生错误)。
第一:为什么我不能读.resx?
第二:如何安装resgen工具?
谢谢。
将资源文件存储在应用程序根目录下的App_GlobalResources
文件夹下或App_LocalResources
与用户控制文件同名,这被认为是一种很好的做法。 因此,例如用户用户控件是本地资源文件夹中的uc.ascx文件应该是uc.ascx.resx。 这样它更容易维护,asp.net会自动检测它。
现在你的答案:
首先:使用Server.MapPath("~/")
直接指向web.config所在的物理位置。 如果要在Controls文件夹中使用资源文件,则必须编写Server.MapPath("~/Controls/Resource1.resx")
以获取路径。
不知道你想用resgen工具做什么? 编译应用程序时,还将编译资源文件。 选择您的资源文件并单击F4,它将显示构建操作,在构建操作中选择资源,您的资源文件将包含在程序集中。
您可以查看此post以获取更多信息: 如何在asp.net网站中使用图像资源?
根据您的描述,我了解您需要找到并访问用户控件的资源文件。 我发现它可以通过以下方式很好地工作:
- 在项目级别创建App_GlobalResources (通过上下文菜单
Add -> Add ASP.NET Folder -> App_GlobalResources
) - 创建与控件同名的ressource文件,但在App_GlobalResources中 。 例如,如果控件名为
myControl.ascx
,则默认语言的myControl.ascx.resx
文件名必须为myControl.ascx.resx
- 为您需要的每种语言创建其他ressource文件。 例如,如果您需要德语(“
de-DE
”),则添加myControl.ascx.de.resx -
添加类
MultiLanguageUserControl
,如下所示:public class MultiLanguageUserControl : System.Web.UI.UserControl { public string getResValue(string id) { var ctrlPath = TemplateControl.AppRelativeVirtualPath; var ctrlFile = System.IO.Path.GetFileName(ctrlPath); var resObj = GetGlobalResourceObject(ctrlFile, id); if (resObj!=null) return resObj.ToString(); else return string.Format("UNRESOLVED[{0}]", id); } }
-
打开myControl背后的代码,使其从
System.Web.UI.UserControl
inheritanceMultiLanguageUserControl
:public partial class myControl : MultiLanguageUserControl { //... }
-
在HTML代码中,使用新函数,例如:
<%=getResValue("resid")%>
,其中"resid"
是您要查找的ressource字符串的名称。 您还可以使用HTML编码标记<%:
而不是<%=
,具体取决于您的要求。 或者,您可以在用户控件中的服务器端C#代码中的任何位置使用getResValue
,以从ressource文件中检索值。 -
确保在页面的
Page_Load
事件中支持语言检测,该事件使用用户控件。 你如何能够做到这一点在这里很好地描述(寻找函数InitializeCulture
)。
如果要从用户控件内部读取页面的本地资源字符串,请查看此处 。
上述就是C#学习教程:在自定义服务器控件asp中使用.resx && .resource文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955787.html