私は、asp.net AjaxControlToolkitからAsyncFileUploadコントロールを取得しようとして、運が悪かったので、午前中ずっと歩き回っていました。
ユーザーに質問を表示するAjax対応のページがあり、ページ全体の投稿を必要とせずに質問を前後に移動できます。ページに複数の質問を表示でき、これらの質問の1つ以上を表示できます。ファイルアップロードコントロール。このページでは、問題であると思われる多数の回答の結果として変更したフォーム要素を含むマスターページを使用しています。
https://stackoverflow.com/a/2918382/728841
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
ページとソリューションの両方にAjaxControlToolkitへの参照があります
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
質問を作成する背後にあるコードは次のとおりです
1. private Control _generateControl(FormFields formFieldObject, string questionID) {
2. logger.Debug("start of method _generateControl()");
3. Control genericControl = _formBLL.getControlForForm(formFieldObject);
4. Type typeofcontrol = genericControl.GetType();
5. logger.Debug(typeofcontrol.ToString());
6.
7. HtmlGenericControl controlHolder = new HtmlGenericControl("div");
8. controlHolder.ID = _ns + "formfieldHolder_" + formFieldObject.id;
9. controlHolder.Attributes.Add("class", _ns + "formfieldHolder");
10.
11. if (typeofcontrol == typeof(AsyncFileUpload))
12 {
13. #region display question number and question
14. Label questionIDLabel = new Label();
15. questionIDLabel.CssClass = _ns + "questionIDLabel";
16. questionIDLabel.Text = questionID;
17. Label questionText = new Label();
18. questionText.CssClass = _ns + "questionText";
19. questionText.Text = formFieldObject.name;
20. #endregion
21.
22. #region add holder for file upload control
23. HtmlGenericControl questionControlHolder = new HtmlGenericControl("div");
24. questionControlHolder.Attributes.Add("class", _ns + "questionControlHolder");
25. genericControl.ID = _ns + "questionControl_" + formFieldObject.id;
26. #endregion
27.
28. AsyncFileUpload fuc = (AsyncFileUpload)genericControl;
29. fuc.ID = _ns + "questionControl_" + formFieldObject.id;
30. fuc.ClientIDMode = ClientIDMode.AutoID;
31. fuc.UploadedComplete += fileuploadClick;
32. fuc.UploadedFileError += fileuploadError;
33. questionControlHolder.Controls.Add(fuc);
34.
35. // add the controls to the holder
36. #region add controls to page
37. controlHolder.Controls.Add(questionIDLabel);
38. controlHolder.Controls.Add(questionText);
39. controlHolder.Controls.Add(questionControlHolder);
40. #endregion
41. }
42. return controlHolder;
43. }
次に、コントロールがaspxページのプレースホルダーに追加されます
<asp:UpdatePanel ID="questionPanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder ID="QuestionSection" runat="server">
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
以下は呼び出されるはずのメソッドですが、Visual Studioのデバッグとログファイルのチェックから、これらのメソッドがヒットすることはありません。
public void fileuploadError(object sender, AsyncFileUploadEventArgs e)
{
logger.Debug("START method fileuploadError()");
logger.Debug("END method fileuploadError()");
}
public void fileuploadClick(object sender, AsyncFileUploadEventArgs e)
{
logger.Debug("START method fileuploadClick()");
logger.Debug("END method fileuploadClick()");
}
他の回答では、コントロールの表示設定がtrue / falseに切り替わる問題があることが示唆されていますが、ページがURLによって直接読み込まれるか、アプリケーションの[次へ]ボタンと[戻る]ボタンを使用してナビゲートすると、コントロールの表示が変更されることはありません。
これにより、コントロールはページのaspxコード上になく、サーバーサイドにロードされるため、どこかに問題がある可能性があると私は考えました。このため、次ボタンと戻るボタンのイベントがトリガーされないという問題があり、イベントをトリガーするためにこれらのコントロールの更新パネルにコードを実際に追加する必要がありましたが、これは変更されるため、質問コントロールのオプションではありませんページからページへ。
うまくいけば解決策を解決するための最後の情報、コントロールはページに表示されます、それをクリックしてファイルを参照できますが、ファイルを選択すると、Page_Loadを呼び出しているようで、他には何も表示されず、次の2つのポップアップが表示されます
Server Response Error: 'Unknown Server Error'
Do You want to see the response page?
その後
Unhandled Exception: Server Response Error: 'Unknown Server Error'
これは、FF 8、Chrome 15.0、およびIE9でテストされたすべてのブラウザーで発生します
Firefoxのfirebugでは、関連する可能性のある次のjavaScriptエラーも発生します
Index or size is negative or greater than the allowed amount
[Break On This Error] Type.registerNamespace("Sys.Extended.U...FileUploadEventArgs",Sys.EventArgs);
どんな助けでもいただければ幸いです。
編集2011/12/13最新バージョンとして本日ダウンロードしたAjaxControlToolkitバージョン4.1.5を使用していますが、問題は解決しません。