0

我的客户想要控制网站上的文本内容。他想要一个可以查看和编辑资源文件文本的界面。

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

在此处输入图像描述

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;
4

2 回答 2

1

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

刷新资源

对资源进行更改后,您实际上可能希望看到新资源显示在实时用户界面中。[....] ASP.NET 的资源提供程序加载资源,并且这些资源会被永久缓存,直到应用程序关闭据我所知,没有释放资源的内置方法,但这里的数据提供者包含一些用于跟踪每个提供者的逻辑 [...]

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

我知道这不是一个好的解决方案,但它对我有用。我试图重新绑定 ressources卸载 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!!!
}
于 2012-08-26T19:38:25.360 回答
0

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

于 2012-08-26T18:17:23.810 回答