我的客户希望控制网站上的文字内容。他想要一个界面,在那里他可以看到并编辑资源文件文本。
我成功显示了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;
答案 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