C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: 認証がでるページを開いた後の挙動


(過去ログ 31 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■14823 / inTopicNo.1)  認証がでるページを開いた後の挙動
  
□投稿者/ terror (1回)-(2008/02/27(Wed) 14:35:50)

分類:[ASP.NET (VB)] 

環境は、
Windows Server 2003 R2 Enterprise Edition SP2
Visual Studio 2005 Professional
SQL Server 2005 Standard Edition
です。

ASP.NETで自動PostBackを有効にしたDropDownListと、Buttonを配置しています。
DropDownListにはhoge,piyo,foo,barという値をTextとValueに設定しています。
DropDownListのSelectedIndexChangedでButtonのOnClientClickに
認証が必要なページを開くように設定しています。

具体的には、ReportingServiceのレポートを
Button1.OnClientClick = "window.open('http://host/ReportServer?/report/Report1&rs:Command=Render');"
のように設定しています。

この状態で、ボタンをクリックすると、
新しいウィンドウでレポートが開く(その前に認証画面が現れる)のですが、
このレポートを閉じ、再びASP.NETの画面を表示したときに、
DropDownListの選択項目を変更しようとすると、一番上のアイテムに勝手に変更されてしまいます。
また、ボタンを押してもレポートが開きません。

自分で色々と試してみたところ、
・ソリューションエクスプローラーからブラウザで表示を選んだときは問題ない
・認証をキャンセルすると問題ない
・認証が出ているときはまだ正常に動作する
・認証の無いページを開くように変更すると問題ない
ということが分かりましたが、これ以上は全くのお手上げです。

皆様の知恵をお借りできないでしょうか?
引用返信 編集キー/
■14831 / inTopicNo.2)  Re[1]: 認証がでるページを開いた後の挙動
□投稿者/ やじゅ (194回)-(2008/02/27(Wed) 15:45:27)
No14823 (terror さん) に返信
> DropDownListの選択項目を変更しようとすると、一番上のアイテムに勝手に変更されてしまいます。
> また、ボタンを押してもレポートが開きません。
>

いろいろ書かれているが、結局お話が見えてこない・・・
If IsPostBack = False が無いとか?

引用返信 編集キー/
■14836 / inTopicNo.3)  Re[2]: 認証がでるページを開いた後の挙動
□投稿者/ terror (2回)-(2008/02/27(Wed) 16:07:13)
No14831 (やじゅ さん) に返信
> ■No14823 (terror さん) に返信
>>DropDownListの選択項目を変更しようとすると、一番上のアイテムに勝手に変更されてしまいます。
>>また、ボタンを押してもレポートが開きません。
> >
> 
> いろいろ書かれているが、結局お話が見えてこない・・・
> If IsPostBack = False が無いとか?
> 

返信ありがとうございます。
聞きたかったことは、認証が出るページを新しく開いた後も、
元のページが使えるようにしたいが、どうすればできるか、ということです。

If IsPostBack = Falseは今回必要でしょうか?
本当はいくつかのDropDownListを連動させている And データバインドを使っているのですが、
問題が確認できた最小構成ではDropDownListもボタンも1つで、
さらにデータバインドの使用は関係ありませんでした。

もしかするとマスターページを使っているのが問題かもしれませんので、
とりあえずはマスターページなしで作成してみます。

ちなみに問題部分のコードは、

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
    <asp:ListItem>hoge</asp:ListItem>
    <asp:ListItem>piyo</asp:ListItem>
    <asp:ListItem>foo</asp:ListItem>
    <asp:ListItem>bar</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Button" />

と、

Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
    Button1.OnClientClick = String.Format("<ReportingServicesのURL>&<レポートのパラメータ>={0}", DropDownList1.SelectedIndex)
End Sub

です。

引用返信 編集キー/
■14839 / inTopicNo.4)  Re[3]: 認証がでるページを開いた後の挙動
□投稿者/ terror (3回)-(2008/02/27(Wed) 16:17:00)
マスターページは関係なかったようです。
引き続きお願いします。
引用返信 編集キー/
■14868 / inTopicNo.5)  Re[4]: 認証がでるページを開いた後の挙動
□投稿者/ terror (4回)-(2008/02/28(Thu) 09:54:26)
根本的な解決というわけではないですが、JavaScriptを書くことで問題を回避できました。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
    <asp:ListItem>hoge</asp:ListItem>
    <asp:ListItem>piyo</asp:ListItem>
    <asp:ListItem>foo</asp:ListItem>
    <asp:ListItem>bar</asp:ListItem>
</asp:DropDownList>
<input id="Button1" type="button" value="button" onclick="func();" />
<script type="text/javascript">
function func() {
    var ddl = document.getElementById('DropDownList1').childNodes;
    var selected;
    for (var i = 0; i < ddl.length; i++) {
        var li = ddl[i];
        if (li.selected) {
            selected = li.value;
            break;
        }
    }
    window.open('<url>&<param>=' + selected);
}
</script>

このように、ASP.NETのButtonではなく、HTMLのinputを使用し、
onclickでfuncを実行することで問題が回避できました。

しかし、あまりいい解決策とは思えないので、引き続き情報を求めます。

引用返信 編集キー/
■14870 / inTopicNo.6)  Re[5]: 認証がでるページを開いた後の挙動
□投稿者/ terror (5回)-(2008/02/28(Thu) 10:04:29)
すみません、確認をサーバに配置した状態ではなく、
ASP.NET開発サーバで行っていました(ソリューションエクスプローラからブラウザで表示)。

サーバに配置した状態ですと、やはり問題が発生してしまいます。
引用返信 編集キー/
■14885 / inTopicNo.7)  Re[6]: 認証がでるページを開いた後の挙動
□投稿者/ terror (6回)-(2008/02/28(Thu) 12:04:03)
Buttonの代わりにa要素を使って

<a href="<url>" target="_blank">open</a>

と書いてみましたが、ダメでした。
どなたか他の環境で再現できるかどうかだけでも確認してもらえないでしょうか?
VSのデバッグ用サーバでは再現出来ないため、
まともなデバッグができず、本当に困っています。
引用返信 編集キー/
■14888 / inTopicNo.8)  Re[7]: 認証がでるページを開いた後の挙動
□投稿者/ y4yama (56回)-(2008/02/28(Thu) 12:55:30)
No14885 (terror さん) に返信
> どなたか他の環境で再現できるかどうかだけでも確認してもらえないでしょうか?
.Net2003なら、今環境はあるのですが、2005じゃないのでダメ?でしょうねぇ?
確認するにしても、「認証が必要なページを開くように」というところが、私の実力では不明なんですが・・・

> ・認証の無いページを開くように変更すると問題ない

DropDownListを配した初めのページにログインするときに認証が必要なページを出すのが
何かで読んだオーソドックスな方法かと思いますが・・違いますか?・・・
引用返信 編集キー/
■14891 / inTopicNo.9)  Re[8]: 認証がでるページを開いた後の挙動
□投稿者/ terror (7回)-(2008/02/28(Thu) 14:18:42)
No14888 (y4yama さん) に返信
> ■No14885 (terror さん) に返信
>>どなたか他の環境で再現できるかどうかだけでも確認してもらえないでしょうか?
> .Net2003なら、今環境はあるのですが、2005じゃないのでダメ?でしょうねぇ?
> 確認するにしても、「認証が必要なページを開くように」というところが、私の実力では不明なんですが・・・

返信ありがとうございます。2003で再現できるかどうかは分かりませんが、
デバッグ用サーバでは動くので、IISの問題のような気もします。
IISのバージョンは、6.0.3790.3959です。

認証が必要なページに関しては、Reporting Servicesのレポートを作れば簡単に作れます。

>>・認証の無いページを開くように変更すると問題ない
>
> DropDownListを配した初めのページにログインするときに認証が必要なページを出すのが
> 何かで読んだオーソドックスな方法かと思いますが・・違いますか?・・・

一つのWebアプリケーションならそうするのでしょうが、
別々のWebアプリケーションになっているため、このような構成となっています。

引用返信 編集キー/
■14946 / inTopicNo.10)  Re[9]: 認証がでるページを開いた後の挙動
□投稿者/ 七曜 (91回)-(2008/02/29(Fri) 00:21:36)
No14891 (terror さん) に返信

[aspx]
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
   <script language="javascript" type="text/javascript">
        function openwindow()
        {
            var element = document.getElementById("DropDownList1");
            var URL = element.options[element.selectedIndex].value;
            window.open(URL);
        }    
   </script> 
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem Value="http://targetServer/">サイト1</asp:ListItem>
            <asp:ListItem Value="http://targetServer/workflow1/default.aspx">サイト2</asp:ListItem>
            <asp:ListItem Value="http://targetServer/workflow2/default.aspx">サイト3</asp:ListItem>
            <asp:ListItem Value="http://targetServer/IC/default.aspx">サイト4</asp:ListItem>
        </asp:DropDownList>    
        <input id="Button2" type="button" value="button" onclick="return openwindow()" /></div>
    </form>
</body>
</html>


http://targetServer/は、認証を要求されるページです。
特に問題なく、選択状態は維持されています。
(local側IIS7、target側IIS6なのでちょっと環境は違いますけど。)

terror さんのコードで、DropDownListのAutoPostBackがTrueに設定されていますが、
コードビハインド側(.vbファイル)のPage_Loadとかで、DropDownListのSelectedIndexに何か設定していたりしませんでしょうか。
試しに、DropDownListのAutoPostBackをFalseにしてみてください。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -