使用的.resx &&在自定义服务器控件ASP .resource文件(using

2019-08-02 01:25发布

我写自己的服务器端的控制和使用图像在的.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工具?

谢谢。

Answer 1:

它被认为是很好的做法,存储在你的资源文件App_GlobalResources夹中的应用程序根目录或App_LocalResources具有相同的名称作为您的用户控制文件。 因此,例如用户的用户控制在本地资源文件夹uc.ascx文件应uc.ascx.resx。 这样更容易维护和asp.net会自动检测到它。

现在,你的回答:

第一:使用Server.MapPath("~/")点物理直接在您的web.config是。 如果你想使用控制的资源文件夹,你必须编写Server.MapPath("~/Controls/Resource1.resx")获得的路径。

不知道你想RESGEN工具做什么? 当您编译应用程序,资源文件也将被编译。 选择您的资源文件,然后点击F4,它会告诉你建行动,选择在建的行动资源和资源文件将包含在装配。

您可以查看这篇文章以了解更多信息: 如何利用图像资源在asp.net网站?



Answer 2:

从你的描述,我理解你需要找到和访问用户控件的资源文件。 我发现,它很好地工作方式如下:

  1. 创建项目水平App_GlobalResources文件 (通过上下文菜单中Add -> Add ASP.NET Folder -> App_GlobalResources
  2. 创建具有相同的名称作为控制的ressource文件,但里面App_GlobalResources文件 。 例如,如果控制被命名为myControl.ascx ,那么的ressource文件的默认语言名称必须myControl.ascx.resx
  3. 创建你需要的每种语言额外的ressource文件。 举例来说,如果你需要德语(“ de-DE ”),再加入myControl.ascx.de.resx
  4. 添加类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); } } 
  5. 打开代码myControl的背后,并使其继承MultiLanguageUserControl而不是从System.Web.UI.UserControl

    public partial class myControl : MultiLanguageUserControl { //... }

  6. 在HTML代码,使用新的功能,例如: <%=getResValue("resid")%> ,其中"resid"是您要查找的字符串的ressource的名称。 你也可以使用HTML编码标签<%:而不是<%= ,根据您的要求。 另外,您也可以使用getResValue在你的服务器双面C#代码中的任何地方用户控件来检索的ressource文件中的值。

  7. 确保您支持的语言检测Page_Load页面的情况下,使用用户控制。 你怎么可以这样做是很好的描述这里 (查找功能InitializeCulture )。

如果你想从用户控件中读取页面的本地资源字符串再看看这里 。



文章来源: using .resx && .resource files in custom server control asp