0

Web フォームのコンテンツをラップする UpdatePanel で構成される Visual WebPart (c#) を使用しています。このフォームの UpdatePanel 内に、送信結果に基づいてテキスト プロパティが設定された asp.net ラベルがあります。実行後に表示されるように設定され、エラーまたは成功に応じて前景色も変更されます。送信ボタンが押されたときに特定のメソッドを呼び出すことを決定するまで、これは完全に機能します(テキストが更新/表示されます)。このメソッドが呼び出されると、テキスト プロパティは更新されず、ラベルは表示されません。

このプロセスを数回デバッグしましたが、プロセスをステップ実行して正しいメッセージを表示するたびに、それがラベルのテキスト プロパティに適用され、完了することを確認しますが、ページは更新されません。メソッド呼び出しをコメントアウトすることで、動作する機能を再現できます。エラーはスローされていません。デバッグ中、プログラムは正しく実行されているように見えます。

送信ボタンのコードの抜粋:

try
                {
                    CreateElementOnDestinationWebs(this.ddlSupportedElements.SelectedValue.ToString(), elementName, ref messages);
                    msg = String.Format("<br />We have successfully created your {0}.  Please review the following outcomes: <br /><ul>", this.ddlSupportedElements.SelectedItem.Text);
                    foreach (string m in messages)
                    {
                        msg += String.Format("<li>{0}</li>", m);
                    }
                    msg += "</ul>";

                    labelMessages.Text = msg;
                    labelMessages.Visible = true;
                    labelMessages.ForeColor = System.Drawing.Color.ForestGreen;                        
                }
                catch (Exception ex)
                {
                    msg = String.Format("<br />An unexpected error occurred while creating the item: {0}", ex.ToString());
                    labelMessages.Text = msg;
                    labelMessages.Visible = true;
                    labelMessages.ForeColor = System.Drawing.Color.Maroon;
                }

CreateElementOnDestinationWebs ソース:

try
                    {
                        Guid listId = web.Lists.Add(name, "Student work can be submitted here.", SPListTemplateType.DocumentLibrary);
                        web.Update();

                        SPList newList = web.Lists[listId];
                        newList.OnQuickLaunch = this.checkDropBoxShowOnQuickLaunch.Checked;
                        newList.EnableModeration = true;
                        newList.Update();

                        GrantStudentGroupsContributeRights(web, ref newList, ref msgs);

                        try
                        {
                            DetectAddColumnsToDropbox(web, ref newList, ref msgs);
                        }
                        catch (Exception)
                        {
                            msgs.Add("There was an unexpected error while attempting to add the site columns to the library.");
                        }                        

                        msgs.Add(String.Format("Your item: {0}, has been successfully created on site: <a href='{1}' target='_blank'>{2}</a>", name, web.Url, web.Title));
                    }
                    catch (Exception)
                    {
                        msgs.Add(String.Format("An error occurred while creating the document library for student work on site: <a href='{0}' target='_blank'>{1}</a>", web.Url, web.Title));
                    }

「DetectAddColumnsToDropbox」を含む try ブロックがコメント アウトされている場合、ラベル (labelMessages) が正しく表示されます。そうでない場合、ラベルは表示/更新されません。問題のメソッドは、フォーム上のコントロールまたは項目を更新しません。

4

2 に答える 2

0

この問題にコメントするか、回答を試みるために時間を割いてくださった皆様に感謝します。検索を続けた後、関連する問題が見つかりました: https://sharepoint.stackexchange.com/questions/5794/trying-to-use-an-spweb-object-that-has-been-closed-or-disposed-and-is -これ以上

メソッド: DetectAddColumnsToDropbox は、指定された Web が含まれるサイト コレクションの rootweb の変数を宣言しました。次に、rootweb オブジェクトを破棄しました。結局のところ、SharePoint はそれを気にせず、JavaScript エラーがスローされていました。Dispose (ブロックを使用) コードを取り出したところ、すべてが labelMessages で適切に機能します。

于 2013-03-18T21:25:10.393 に答える
0

内部の try/catch を省略するか、呼び出し元のメソッドに例外をスローしてみてください。

于 2013-03-18T18:40:51.717 に答える