如何使用资源文件作为可编辑列表视图的数据源?

时间:2012-08-26 18:10:55

标签: asp.net localization resources resx

我的客户希望控制网站上的文字内容。他想要一个界面,在那里他可以看到并编辑资源文件文本。

成功显示了listview 中资源文件的内容。 正在更新卡住的地方。我只是不知道在更新事件中要写什么。有谁知道一个简单的方法?

enter image description here

ResourceSet rs = Resources.resfile.ResourceManager.
                     GetResourceSet(System.Threading.Thread.CurrentThread.CurrentCulture, true, true);

protected void Page_Prerender(object sender, EventArgs e)
{
    ListView1.DataSource = rs;
    ListView1.DataBind();
}
protected void ListView1_ItemCanceling(object sender, ListViewCancelEventArgs e)
{
    ListView1.EditIndex = -1;
}
protected void Updating(Object sender,ListViewUpdateEventArgs e)
{                
}

以下代码有效,但在编辑后不会刷新,在我更新其他内容后会刷新。

XmlDocument loResource = new XmlDocument();
loResource.Load(Server.MapPath("/App_GlobalResources/resfile.resx"));

XmlNode loRoot = loResource.SelectSingleNode(
                            string.Format("root/data[@name='{0}']/value",e.Keys[0].ToString()));

if (loRoot != null)
{
    loRoot.InnerText = e.NewValues[1].ToString();
    loResource.Save(Server.MapPath("/App_GlobalResources/resfile.resx"));
}    
ListView1.EditIndex = -1;

2 个答案:

答案 0 :(得分:1)

我刚刚对您的问题进行了演示,发现了同样的问题。在谷歌搜索并阅读一些论坛条目后,我偶然发现了这个 blog Rick Strahl 指出:

  

刷新资源

     

在对实际可能喜欢的资源进行更改之后   查看实时用户界面中显示的新资源。 [....]   ASP.NET的资源提供程序加载资源资源   在应用程序关闭之前永远缓存就我而言   知道没有内置的方式来释放资源,但数据   这里的提供者包括一些跟踪每个提供者的逻辑[...]

由于我不想实现数据库来存储可以更新的资​​源,我尝试了这个非常脏的小东西!只需调用Response.Redirect ,并从浏览器强制执行一个完整的新Page.Request。所以服务器获得一个新的响应并重新缓存资源!

我知道这不是一个好的解决方案,但它对我有用。我尝试重新绑定资源卸载appDomain 等等 - 没有任何效果!我希望这个答案可以帮到你!

protected void ListView1_ItemUpdating(Object sender, ListViewUpdateEventArgs e)
{
    string key = e.Keys[0].ToString();
    string value = e.NewValues[0].ToString();

    XmlDocument loResource = new XmlDocument();
    loResource.Load(Server.MapPath("App_GlobalResources/resFile.resx"));

    XmlNode loRoot = loResource.SelectSingleNode(
                                string.Format("root/data[@name='{0}']/value", key));

    if (loRoot != null)
    {
        loRoot.InnerText = value;
        loResource.Save(Server.MapPath("App_GlobalResources/resfile.resx"));
    }

    ListView1.EditIndex = -1;
    Response.Redirect("demo.aspx");  // that's all!!!
}

答案 1 :(得分:0)

这是一个代码项目,可以解释如何更新列表视图: http://www.codeproject.com/Articles/24570/Complete-ListView-in-ASP-NET-3-5