3

ここで説明されているように ajaxFileUpload を使用しています: http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AjaxFileUpload/AjaxFileUpload.aspx

同じページに複数のファイル アップロード コントロールがある場合を除いて、正常に動作しています。具体的には、質問ごとに異なるファイルをアップロードしようとしています。ページに最初のものをアップロードすると正常に動作しますが、ページの下の方にあるファイルは、最初の質問の回答にのみアップロードされます。

それが理にかなっているかわからない...私のページにはascxファイルを使用して動的に質問が入力されていることを知っておくと役立つかもしれません. ドキュメントの ascx ファイルは次のようになります。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Document.ascx.cs" Inherits="ScholarshipApplication.controls.questions.Document" %>


<ajaxToolkit:AjaxFileUpload OnUploadComplete="UploadComplete"  ID="FileUploadControl" MaximumNumberOfFiles="1" runat="server" AllowedFileTypes="png,jpg,jpeg,pdf,tiff,tif,gif" />
<asp:LinkButton ID="downloadButton" runat="server" CausesValidation="false" OnClick="downloadButton_Click" />

そして背後にあるコード:

public void UploadComplete(object sender, AjaxFileUploadEventArgs e)
        {
            entry.data = e.FileName;
            entry.setDocumentData(e.GetContents());

            this.downloadButton.Text = e.FileName;
        }

私の最初の考えは、コントロールの生成された javascript が、どの質問をいつトリガーする必要があるかを知るのを助ける必要があるということです。

4

3 に答える 3

2

これは制御上のバグであるか、明らかでない理由で実装されたものだと思います。実際には、このコントロールはページ上の複数のインスタンスをサポートしていません。代わりにAsyncFileUpload コントロールを使用するか、コントロールのビット ソースをカスタマイズすることを検討してくださいAjaxFileUpload。2 番目のオプションを希望する場合は、ここからソースをダウンロードする必要があります: http://ajaxcontroltoolkit.codeplex.com/SourceControl/BrowseLatestおよび AjaxFileUpload.cs ファイルを変更します (ここにパスがあります: /Server/AjaxControlToolkit/AjaxFileUpload/AjaxFileUpload.cs)。必要なことは、ContextKey定数をプロパティに変更して、コンテキスト キー guid とコントロールの一意の ID を組み合わせることです。

public class AjaxFileUpload : ScriptControlBase
{
    private const string ContextKeySuffix = "{DA8BEDC8-B952-4d5d-8CC2-59FE922E2923}";

    private string ContextKey
    {
        get { return this.UniqueID + "_" + ContextKeySuffix; }
    }

実際、クラスPreRenderのメソッドを見るとAjaxFileUpload、このコントロールのそのような動作の理由を簡単に理解できます (最初のコントロール ハンドルは、ページ上のすべての兄弟コントロールからアップロードされます)。

于 2013-01-03T22:10:20.507 に答える
0

すべての AjaxFileUpload コントロールで「data-upload-type」という名前のデータ属性を作成し、それをタイプの名前に設定しました。次に、クライアント呼び出しを設定してその値を取得し、同じ値で Cookie を設定します。クッキーはサーバー側の関数で受信され、受信した値に基づいて分岐します。

次に例を示します。

function StartUpload(sender, args) {
    var t = $(sender._element).attr('data-upload-type');
    document.cookie = 'upload-type=' + $(sender._element).attr('data-upload-type') + ';';
}

<asp:AjaxFileUpload ID="afuUploader1" runat="server"  OnClientUploadStart="StartUpload" OnUploadComplete="UploadComplete" OnClientUploadComplete="UploadComplete" data-upload-type="UploadType2"></asp:AjaxFileUpload>

次に、サーバー側のアップロード呼び出しで、Response.Cookies("upload-type") を確認します。魔法のように動作します!

于 2016-09-30T21:23:46.843 に答える
0

私の理解によると、UserControlで質問IDを識別するには、非表示のフィールド変数が必要です。

<input type="hidden" id="hdnQuestionId" runat="server"/>

質問の入力/生成中に、この変数を設定する必要があり、ドキュメントをアップロードするときに、この非表示の値を取得して使用します。

于 2013-01-03T05:12:51.793 に答える