質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

1588閲覧

イベント実行中の変更された値を別関数でも取得したい

kentasuzuki_

総合スコア28

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/11/05 08:02

編集2021/11/08 03:37

クリックイベント実行中に値が変更されるのですが、その値を取得したいと思っています。
ただその方法が分からないので、問題解決の考え方を教えていただきたいと思っております。

現状のシステムの具体的なイメージを申し上げますと、

申請画面があり、添付ファイルが付いている状態です。
この時持っている値として、Reqest.QueryStringメソッドで取得した既存の申請番号を持っています。
この既存の申請番号を添付ファイル名に付与しています。

【やりたいこと】
最終承認ボタンクリックイベント後に、添付ファイルダウンロードリンクのクリックイベントを発生させた際に、
最終承認ボタンクリックイベント中に取得した新しい申請番号を添付ファイルダウンロードリンクのクリックイベントでも取得できるようにしたいです。
※ちなみにですが、最終承認ボタンクリックイベント内に添付ファイルダウンロードリンクのイベントを呼ぶという方法は無しでお願いいたします。

【現状】
添付ファイルダウンロードリンクのクリックイベント内で、Reqest.QueryStringメソッドを利用し、URLのパラメータの値を取得し、それを既存の申請番号(=添付ファイル名)として利用しているため、添付ファイルが見つからず、アプリケーションエラーになっています。

以下は、要所だけをまとめたイベントになります。
ちなみにどちらも同一クラスです。
ご参考までに書かせていただきます。

test.aspx start-- //フロント側の最終承認ボタンになります。 <div class= "button-area" id="ButtonArea" runat="server"> <asp:LinkButton ID="FinalApprovalLinkButton" runat="server" Text="最終承認" CssClass="button final-approval" Onclick="FinalApprovalLinkButton_Click"/> </div> //フロント側の添付ファイルダウンロードボタンになります。 <cc1:GridViewEx ID="AttachmentGridView" runat="server" CssClass="list-table" AutoGenerateColumns="false" OnRowCommand="AttachmentGridView_RowCommand" OnRowCommand="AttachmentGridView_RowDataBound" > <Columns> <asp:TemplateField ItemStyle-CssClass="download"> <ItemTemplate> <asp:LinkButton ID="DownloadLinkButton" runat="server" Text="ダウンロード" CommandName="FileDownload" CommandArgument='<%# Eval("Index") %>'/> </ItemTemplate> </asp:TemplateField> </Columns> </cc1:cc1:GridViewEx> test.aspx end-- --test.aspx.cs start-- --最終承認ボタンクリックイベントstart-- protected void FinalApprovalLinkButton_Click(object sender, EventArgs e) { // 新しい申請番号 int newDemandPeriod; →この値の初期値はnullです。 int newDemandNumber; →この値の初期値はnullです。 //最終承認処理 if (!ApproveFinal(out newDemandPeriod, out newDemandNumber)) return; /古い申請番号を取得 int oldDemandPeriod = int.Parse(Request.QueryString["Period"]; int oldDemandNumber = int.Parse(Request.QueryString["Number"]; //既存の添付ファイル名を変更する処理 //ここの処理は参考までに記載しております。 if (RenameAttachedFiles(oldDemandPeriod, oldDemandNumber, newDemandPeriod, newDemandNumber)) { return; } } --最終承認ボタンクリックイベントend-- --最終承認処理関数の中身start-- private bool ApproveFinal(out int newDemandPeriod, out int newDemandNumber) { //トランザクション管理は割愛させていただきます。 //最新の申請番号_期番を取得 //GetPeriod関数の中身は割愛しますが、現在日時の値を引数として、ある数字を取得しています。 newDemandPeriod = GetPeriod(DateTime.Now); //新しい信施番号_連番を取得 //GetDemandNumberの中身は割愛しますが、最新の申請番号_期番の値を引数として、連番を取得しています。 newDemandNumber = GetDemandNumber(newDemandPeriod); //古い申請番号を取得 int oldDemandPeriod = int.Parse(Request.QueryString["Period"]; int oldDemandNumber = int.Parse(Request.QueryString["Number"]; //申請情報を取得 //ここで古い申請番号をキーにして、T_申請テーブルからデータを取得しています。 //daoはT_申請TableAdapterです。 DataSet.T_申請.T_申請DataTable dt = dao.GetDataByPrimariKey(demandPeriod, demandNumber); //最終承認の値を設定 dt[0].申請番号_期番 = newDemandPeriod; dt[0].申請番号_連番 = newDemandNumber; //T_申請テーブルを更新 dao.Update(dt); } --最終承認処理関数の中身end-- --添付ファイルダウンロードリンクのクリックイベントstart-- //indexの引数に入ってくる値はGridViewの行数になります private void DownloadFile(int index) { //最新の申請番号を取得したいのですが、方法が分かりません。```ここに言語を入力 int newDemandPeriod = ?; int newDemandNumber = ?; //申請情報取得 DataSet.T_申請T_申請DataTable data = GetData(newDemandPeriod, newDemandNumber); DataTime stime = data[0].申請日時; //ダウンロード処理 //この関数内で添付ファイルをダウンロードしていますが、最新の申請番号と連番を取得できれば問題が解決します。 DownloadAttachedFile(引数1, 引数2, newDemandPeriod, data[0].申請日時]; } --添付ファイルダウンロードリンクのクリックイベントend-- --添付ファイル情報 行コマンド実行時処理イベントstart-- pretected void AttachmentGridView_RowCommand(object sender, GridViewCommandEventArgs e) { if(e.CommandName="FileDownload") DownloadFile(int.Parse(e.CommandArgument.ToString())); } --test.aspx.cs end--

試したこと

既存の申請番号を取得する方法として、Reqest.QueryStringメソッドを利用しているため、
Webページを更新すれば新しい申請番号を取得できると思い、Response.Redirect(Request.RawUrl,false)メソッドを利用しましたが、システムの都合上により使えない仕様となっているようなので、この方法は断念しました。

追加情報(FW/ツールのバージョンなど)

Web Formsを利用し、開発をしています。

【開発環境】
開発環境 VisualStudio2019
言語   C#

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/11/05 08:41

コードを提示しよう
退会済みユーザー

退会済みユーザー

2021/11/05 08:54

ASP.NET の話なら ASP.NET のタグを付けよう。 ASP.NET の何を作っているか(Web Forms, MVC いろいろある)と開発環境を書こう。
kentasuzuki_

2021/11/05 09:04

コードですが、膨大になってしまうので全てを提示することができないので、小さくまとめて後日投稿させていただきます。 開発環境の件、省略して申し訳ございません。 ASP.NETのWeb Formsを利用しています。
退会済みユーザー

退会済みユーザー

2021/11/05 09:06

ASP.NET の話なら ASP.NET のタグを付けよう。開発環境を書こう。 Web Forms であることは質問欄を編集して追加情報として追記してください。
kentasuzuki_

2021/11/05 13:30

ご指摘の箇所ですが、追加しました。
ku__ra__ge

2021/11/05 13:55

コードが無いからこれでうまくいくか分からないが、セッション変数とかViewStateに申請番号を保存しといて、添付ファイルダウンロードリンクのクリックイベント処理の中でそれを読めばいいんじゃないかな。
退会済みユーザー

退会済みユーザー

2021/11/05 22:57

> コードですが、膨大になってしまうので全てを提示することができないので、小さくまとめて後日投稿させていただきます。 お待ちしています。やりたいことだけ示したごく簡単なサンプルでお願いします。
kentasuzuki_

2021/11/08 02:24

コードを記載いたしましたが、分かりづらいところなどがありましたらご指摘ください。 何卒宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2021/11/08 02:52 編集

.aspx ファイルのコードも書いてください。単純に「最終承認ボタン」が 1 個しか配置されてないということでしたら不要ですが。 .aspx.cs 側もコードの肝心な部分に省略したものはありませんか?
kentasuzuki_

2021/11/08 03:10

.aspxのコードも追記いたしました。 最終承認ボタンが1つしか配置されていませんが、念のため記載しております。 .aspx.csで肝心な部分に関しては省略していないと思います。
退会済みユーザー

退会済みユーザー

2021/11/08 03:17

「添付ファイルダウンロードリンクのクリックイベント」のハンドラが無いようですが? DownloadFile メソッドは何がどう言うタイミングで起動するのでしょう?
kentasuzuki_

2021/11/08 03:40 編集

失礼いたしました。 添付ファイルダウンロードに関しての.aspxのコードと.aspx.csも追記いたしましたので、ご確認お願い致します。 添付ファイルが追加されているかどうかに関しては、GrieViewで制御していますが、 追加されていれば、ダウンロードのリンクが発行されまして、そこから添付ファイルがダウンロードされるという仕組みになっています。
退会済みユーザー

退会済みユーザー

2021/11/08 04:04 編集

コードには適宜改行を入れてもらえませんか? 自分でもやってみたらわかると思いますが見にくいです。 GridViewEx というのは何だか不明ですが、何にせよその中の LinkButton をクリックしたときに動くイベントハンドラのコードで DownloadFile メソッドが起動されるのですか? そうは見えませんけど・・・ ちょっとイイカゲンすぎませんか? > <cc1:GridViewEx ID="AttachmentGridView" > runat="server" CssClass="list-table" > AutoGenerateColumns="false" > OnRowCommand="AttachmentGridView_RowCommand" > OnRowCommand="AttachmentGridView_RowDataBound" >
kentasuzuki_

2021/11/08 04:26

分かりました。 修正させていただきます。
guest

回答1

0

ベストアンサー

以下のようなことであろうと想像して回答します。想像が違っていたらどこがどう違うか書いてください。

単一の .aspx ページに FinalApprovalLinkButton ボタンと DownloadLinkButton ボタンがある。

まず、ユーザーは FinalApprovalLinkButton ボタンをクリック。

ポストバックされて、サーバー側のイベントハンドラで以下の操作が行われる。

protected void FinalApprovalLinkButton_Click(object sender, EventArgs e) { ApproveFinal メソッドで「新しい申請番号」を取得 クエリ文字列から「古い申請番号」を取得 RenameAttachedFiles メソッドで既存の添付ファイル名を変更 }

次にユーザーは DownloadLinkButton ボタンをクリックする。

ポストバックされて、そのイベントハンドラで DownloadFile メソッドが実行される。

その時、DownloadFile メソッド内で FinalApprovalLinkButton_Click メソッドで取得した「新しい申請番号」を取得したい。

上の想像で合っていたら、FinalApprovalLinkButton_Click で「新しい申請番号」を取得したら、それを ViewState に保持すれば、DownloadFile メソッドで取得できます。

投稿2021/11/08 04:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kentasuzuki_

2021/11/08 04:35

色々とご丁寧に対応していただき、ありがとうございます。 上記のご想像で合っています。 ViewStateというのを利用すれば良いんですね! 結構調べてみましたが、ようやく解決しそうで大変感謝しております。 ViewStateに関して、分からないことがありましたら、また改めてご質問をさせていただきます。 何卒宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問