我编写自己的服务器端控件并使用在.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工具?
感谢。
答案 0 :(得分:1)
将资源文件存储在应用程序根目录中的App_GlobalResources
文件夹下或App_LocalResources
中,与用户控制文件同名,这是一种很好的做法。因此,例如用户用户控件是本地资源文件夹中的uc.ascx文件应该是uc.ascx.resx。这样就更容易维护,asp.net会自动检测它。
现在你的回答:
<强>首先:强>
使用Server.MapPath("~/")
指向web.config所在的物理位置。如果要在Controls文件夹中使用资源文件,则必须编写Server.MapPath("~/Controls/Resource1.resx")
以获取路径。
不确定你想用resgen工具做什么?编译应用程序时,还将编译资源文件。选择您的资源文件并单击F4,它将显示构建操作,在构建操作中选择资源,您的资源文件将包含在程序集中。
您可以查看此帖子以获取更多信息:How to use image resource in asp.net website?
答案 1 :(得分:1)
根据您的描述,我了解您需要找到并访问用户控件的资源文件。我发现它可以通过以下方式很好地工作:
Add -> Add ASP.NET Folder -> App_GlobalResources
)myControl.ascx
,则默认语言的ressource文件名称必须为myControl.ascx.resx
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"
是您要查找的资源字符串的名称。您还可以使用HTML编码代码<%:
代替<%=
,具体取决于您的要求。或者,您可以在用户控件中的服务器端C#代码中的任何位置使用getResValue
,以从ressource文件中检索值。
确保您支持使用用户控件的页面Page_Load
事件中的语言检测。如何做到这一点很好地描述here(寻找函数InitializeCulture
)。
如果您想从用户控件中读取页面的本地资源字符串,请查看here。