0

ユーザーが複数行のデータを追加できる.aspxページ内にasp:GridViewコントロールがあります。ユーザーは、追加されたデータの各行にファイルを添付できる必要もあります。

このために、GridView内で以下を使用します。

<asp:TemplateField HeaderText="Upload" HeaderStyle-Width="120px">
     <EditItemTemplate>
         <asp:FileUpload ID="fuUploadLocation" runat="server" Width="98%" TabIndex="18" />
     </EditItemTemplate>
</asp:TemplateField>

次に、ファイルのアップロード場所を保存するために、コードビハインドでRowUpdatingイベントを使用して値などを設定します。

問題は、HTMLのコントロールにPostBackTriggerを登録できないことです。これは、GridView内にあるため、PostBackTriggerがそれを取得しないためです。他の例から動的に設定しようとしましたが、これを機能させることができないようです。その結果、FileUploadのFileNameは常に空になり、ファイルは正しく保存されません。

どんな提案も素晴らしいでしょう。

ありがとう

4

4 に答える 4

0

私は自分の問題の解決策を見つけていませんが、それを回避しました (一種の)。グリッドにリンクを追加するだけで、ユーザーがクリックすると、クエリ文字列を介して ID が送信され、新しいページが開き、アップロード プロセス全体が処理され、保存されたドキュメントの URL が返されます。

理想的ではありませんが、機能し、何時間ものフラストレーションを解消してくれました。

于 2012-04-25T09:30:46.650 に答える
0

これは古い投稿ですが、それに固執している人は、他の回答に記載されているように、次をコントロールに追加する必要があります。

protected void ItemDataBound(object sender, EventArgs e)
{
    Button myButton = (Button)e.Item.FindControl("myButton");

    if (myButton != null) 
        ScriptManager.GetCurrent(Page).RegisterPostBackControl(myButton);
}

また、フォーム タグの enctype を次のように変更する必要があります。

protected void Page_PreRender(object sender, EventArgs e)
{
     Page.Form.Attributes.Add("enctype", "multipart/form-data");
}

その後、問題なく動作するはずです。

于 2015-03-19T11:17:47.643 に答える
0

グリッドの OnItemDataBound イベント ハンドラーで、ScriptManager.GetCurrent(this).RegisterPostBackControl(ControlID); を呼び出す必要があります。

于 2012-11-23T18:36:16.053 に答える
0

Gridview 行のデータバインドでは、ファイル アップロード コントロールを見つけて、それを UpdatePanel ポストバック トリガーに追加する必要があります。

于 2012-04-18T08:49:52.080 に答える