0

私のクライアントは、Webサイトのテキストコンテンツを管理したいと考えています。また、リソースファイルのテキストを表示および編集できるインターフェイスが必要です。

リストビューにリソースファイルの内容を表示することに成功しました。更新は私が立ち往生している場所です。更新イベントで何を書くべきかわからない。誰もが簡単な方法を知っていますか?

ここに画像の説明を入力してください

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 に答える