我写自己的服务器端的控制和使用图像在的.resx file.In控制台应用程序stoores此代码工作正常:
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());
}
}
我得到eror:
找不到文件'C:\ Program Files文件\ Common Files文件\ Microsoft共享\ DevServer \ 10.0 \ Resource1.resx'
我tryed使用的ResourceManager但requers .resource文件。 我不能访问RESGEN工具(命令PROMT不懂[RESGEN]命令),并安装它(erors发生)。
第一:为什么我不能阅读的.resx?
第二:如何安装RESGEN工具?
谢谢。
它被认为是很好的做法,存储在你的资源文件App_GlobalResources
夹中的应用程序根目录或App_LocalResources
具有相同的名称作为您的用户控制文件。 因此,例如用户的用户控制在本地资源文件夹uc.ascx文件应uc.ascx.resx。 这样更容易维护和asp.net会自动检测到它。
现在,你的回答:
第一:使用Server.MapPath("~/")
点物理直接在您的web.config是。 如果你想使用控制的资源文件夹,你必须编写Server.MapPath("~/Controls/Resource1.resx")
获得的路径。
不知道你想RESGEN工具做什么? 当您编译应用程序,资源文件也将被编译。 选择您的资源文件,然后点击F4,它会告诉你建行动,选择在建的行动资源和资源文件将包含在装配。
您可以查看这篇文章以了解更多信息: 如何利用图像资源在asp.net网站?
从你的描述,我理解你需要找到和访问用户控件的资源文件。 我发现,它很好地工作方式如下:
- 创建项目水平App_GlobalResources文件 (通过上下文菜单中
Add -> Add ASP.NET Folder -> App_GlobalResources
) - 创建具有相同的名称作为控制的ressource文件,但里面App_GlobalResources文件 。 例如,如果控制被命名为
myControl.ascx
,那么的ressource文件的默认语言名称必须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的背后,并使其继承MultiLanguageUserControl
而不是从System.Web.UI.UserControl
:
public partial class myControl : MultiLanguageUserControl { //... }
在HTML代码,使用新的功能,例如: <%=getResValue("resid")%>
,其中"resid"
是您要查找的字符串的ressource的名称。 你也可以使用HTML编码标签<%:
而不是<%=
,根据您的要求。 另外,您也可以使用getResValue
在你的服务器双面C#代码中的任何地方用户控件来检索的ressource文件中的值。
确保您支持的语言检测Page_Load
页面的情况下,使用用户控制。 你怎么可以这样做是很好的描述这里 (查找功能InitializeCulture
)。
如果你想从用户控件中读取页面的本地资源字符串再看看这里 。