トップページphp
986コメント449KB

【質問】ASP.NETスレ Part4【議論】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/07/17(火) 23:49:46ID:pyJr9yIy
●過去ログ
Part1 - 【質問】 ASP.NETスレ 【議論】
http://pc5.2ch.net/php/kako/1040/10406/1040698263.html

【質問】ASP.NETスレ Part2【議論】
http://pc8.2ch.net/test/read.cgi/php/1111480331/

【質問】ASP.NETスレ Part3【議論】
http://pc11.2ch.net/test/read.cgi/php/1160355849/
0217nobodyさん2007/10/21(日) 01:32:40ID:???
フレームなんか使うな。
0218nobodyさん2007/10/21(日) 01:52:59ID:1pk3RmdZ
せっかくのPostbackなんだから単一画面でしょう
0219nobodyさん2007/10/21(日) 10:05:16ID:???
フレーム使わないでテーブルにぶち込むとか、<hr>で区切るとか汁!
02202162007/10/22(月) 00:25:54ID:???
>>217-219
とりあえず今回は上記の方法を採用しました。
動作としては今のところ問題ないようですのでこのままいきます。
ちなみになぜフレームを採用したかというと画面上部のフレームは
検索条件を指定する画面を表示するのですが
簡易検索条件入力フォームと詳細検索画面を切り替え、且つ、
下部は共通したGridViewを使用したかったためです。
ありがとうございました。
0221nobodyさん2007/10/22(月) 01:51:40ID:???
今回は仕方無いにしても,今度はフレームを利用せずに
それらを実現できるように成長することを期待。
02222162007/10/22(月) 03:32:30ID:???
>>221
ケースバイケースケースで
上部のフレームの中身を差し替えることで
検索条件の指定方法を変えたいと思いフレームを採用しましたが、
そこまでフレームを非推奨なのにはなにかわけがあったりしますか?
今回は切り替えと、常に上部に表示させておきたいということで
フレームを採用しましたがそこまで否定派が多いとちょっと気になります。
0223nobodyさん2007/10/22(月) 13:18:05ID:???
>>222
フレームについては宗教論争的な部分もあるんで他人から
強制させられるよりも自分で見つけたほうがいいよ。

とは言っても、あれなんで簡単に
・W3Cはframeに対して否定的な動き。
・1つのURIに1つの情報と言うのが理想的である。
・ユーザビリティ的にも、セキュリティ的にも低下する恐れがある。
ttp://java-house.jp/~takagi/paper/iw2002-jnsa-takagi-dist.pdf
・SEO関係の話
・完全ではないにしても(i)frameのメリットである「情報の部分再描画」はajaxで「スクロールによる表示箇所の分離」はcssで出来る。

とか色々、どれも否定する決定的な要因は無いのだが利用している側は大抵が「なんとなく」で使ってる場合が
多いので否定的な意見されるのが現実です。個人的には、上記のような事を理解した上で、デメリットを解決したり
無視できる状況を作り「フレームを使う」事によってしか生まれないメリットを追求する意思があるのならいいと思う。

上記は、HTML上の話だけだが更にASP.NETでフレーム開発になると以下が追加される。
ASP.NETのフレームワーク基本概念「postback」や「ViewState」は同一ページ内の処理を基本と
するため相性が悪い為、VS2003では選択できたフレームセットのテンプレートはVS2005では無くなりました。
VSから作れないだけでテキストエディタなどで作成することは可能ですが、別フレーム間の操作やデータ参照で
トラブルまたはASP.NETで作成する意味が無くなる場合があります。

ttp://karua.at.webry.info/200607/article_12.html
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25167&forum=7&start=8&15

これを解決するにはHTML・CGIの知識とあわせてASP.NETの「イベント関係の理解」・「postbackやViewStateの内
部的な動き」「動的に作成されるJavascriptの理解」など通常フレームワークで隠蔽されている部分の知識が必要に
なる場合がほとんどです。
で、大抵ASP.NETでframeを使った際のトラブルなんて特殊な状況を想定できる人は少ないので、Webで質問しても
レスを貰う事も難しくなります。
0224nobodyさん2007/10/22(月) 13:43:34ID:???
>>214
追加だが
現在、「自動コンパイル」で遅いと思っていて手軽に解決するなら
「埋め込み先コンパイル」が一番簡単です。

cd /d C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Aspnet_compiler -v /仮想ディレクトリ名 -errorstack

を2003Serverのコマンドプロンプトで流せば全てのファイルに
自動コンパイルを行った状態になります。
0225nobodyさん2007/10/22(月) 22:58:44ID:???
あとセッション使うと単純にやると各フレームで同時処理できないからそれも注意がいるかもよ。

0226nobodyさん2007/10/23(火) 00:43:07ID:???
>>225
どういう意味でしょうか?
02272162007/10/23(火) 01:51:24ID:???
>>223
なるほど。
>>W3Cはframeに対して否定的な動き
盲目的に信じるのもあれですがW3Cが推奨しないということは
やはりそれなりの理由があるんでしょうね。
>>VS2003では選択できたフレームセットのテンプレートはVS2005
2005でなくなっていてびっくりしました。
やはりVSとしても推奨しない動きなんでしょうね。
今回とりあえずフレームで実装したのですが変更した方がよいでしょうね。
だとしたら>>216>>220に内容は書きましたがフレームを使用することで
画面上部に検索条件入力フォームを「常に」表示させていたのですが
これをフレームを使用せずに用件を満たす必要があります。
フレーム無しで画面上部に常に表示させていたいコントロールを配置する場合
どうすればよいでしょうか?
常に表示させておく必要がなければvisibleあたりを制御するだけでよいのですが。。

>>225
これは>>226さんと同じく気になります。
どういう意味でしょうか?
02282162007/10/23(火) 02:32:53ID:???
すみません全く別の質問よいでしょうか?
検索結果一覧の画面を作成するためにどのコントロールを採用すればよいかお教えください。
目的は以下のサイトのようなビューです。
ttp://www.st-image.com/12/13/itemlist.aspx
・ページングあり
・単純な行での一覧表示ではなく、横→縦にデータが並んで表示される
試したこと
・GridView
 横に並んで表示できない
・DataList
 自前でページング処理を記述する必要があり
・DetailsView & FormView
 1レコードずつしか表示できない

一件DataListでもなんとかなると思うのですが自前で毎回全件を取得しないように気をつけたページング
処理を記述する必要があると言うところが腑に落ちません。
DataViewですとObjectDataSourceとObjectDataSourceのSelectedMethodを連携させることで
ページング処理を簡単に書くことができます。
なのにDataListでわざわざ自前でページング処理を書かなければならないというのが違和感です。
こういうサイトはどのようなコントロール&処理を実装しているのでしょうか?
0229nobodyさん2007/10/23(火) 11:13:34ID:???
>>227
まず、海外も含めてインターネット上で公開されているWebサービスで上部にボタンなどが固定されている
実例が少ないことを考えれば固定する必要がなくても使いやすいシステムはできると言うことを念頭に置くべきです。
「画面内に必要な情報を集める」とか「検索処理をした後に検索のテキストボックスが常に見えている必要があるのか?」とか

それでも固定することにメリットがあると思うのならCSSで[overflow:autoとかposition:fixed(IE6対応にはjavascriptが必要)]
ttp://msdn2.microsoft.com/ja-jp/library/default.aspx
(リキッドレイアウトにも対応)
は、数ある方法の無難な良い例になるので自分で解析してください。
Firefoxにfirebugアドオン入れれば解析も楽なはず。
もしくは、前のレスで言った「フレームを使う」事によってしか生まれないメリットを追求する。

各画面に同じレイアウト書かなきゃならんと言う開発側の問題はVS2005ならマスターページで解決する。

>>228
ObjectDataSourceを使ってる場合、GridViewだろうとページングの見た目は作成されるが処理は自前だけど。
SqlDataSourceなら処理部分まで自動で処理してくれるが、ボトルネックとか拡張性に問題があるので使い道はあまり無いが。

>処理を記述する必要があると言うところが腑に落ちません。
ASP.NETは魔法の杖じゃないから、普通にCGIで考えれば「必要な件数をDBから取得して」「必要な件数を表示する」と言うの
は当然でGridView+DataSourceはそれを処理しやすくなっているに過ぎないし。
だから、技術が無い・手軽になら既存のコントロールをベースにデザインを考えるしかない。
逆なら、クラスを継承するなり、カスタムコントロールなりで拡張すればいいだけ。
フレームワークの基本だと思うんだけどね。

1.ページング表示部を自作してDB検索してDataTableを作って「Repeater」コントロールで<div style="float:left;">を出力もしくは
DataListのDataSourceにDataTableを設定まで自分で作る。(中途半端にDataSourceなどの繋ぎに拘ると面倒になるので)
2.DataListを拡張(ユーザコントロール、カスタムコントロール)してDataSourceと連動するように作る。
 (ググればカスタムコントロールを作っている人も良そうだが)
0230nobodyさん2007/10/23(火) 11:57:47ID:???
Javascriptでaspを呼び出すことはできるのでしょうか。

Javascriptでクッキー処理 −引数つけてASP呼び出し→ ASP処理 → ASPでJS書き出し

という感じのことをやりたいのですが。
02312302007/10/23(火) 11:58:30ID:35vpnyji
age忘れましたすみません。
0232nobodyさん2007/10/23(火) 13:19:48ID:???
>>230
引数つけてASP呼び出し
location.href('http://www.aaa.aspx?a=1')
他は省略

>Javascriptでクッキー処理 −引数つけてASP呼び出し→ ASP処理 → ASPでJS書き出し
ってか、この各処理は同一のaspxでの話しを想定してるの?
クッキー処理はASPへのデータ引渡しの為に使うの?

つうか、ASP.NET以前に、「HTMLとCGI」の値の受け渡しに利用しようとしているんであれば
クライアントとサーバの切り分けが出来ていないように感じるんだがその辺は大丈夫?
そう感じた理由に「本来ならPostを基準にデータを取得する所をPostデータの管理を便利にする為
にCookieを利用している」と切り分けが出来てるなら、ASP.NETの基本概念を見ればどの様に変化
したかがわかると思うんだよね。
02332162007/10/24(水) 00:36:46ID:???
>>229
・フレームについて
回答ありがとうございます。
>検索処理をした後に検索のテキストボックスが常に見えている必要があるのか?
通信販売等のサイトで使い勝手を確認したところおっしゃるとおり「ない」です。
常に見えていないことが特に気になりませんでした。
急遽フレームを使う仕様を変更しました。
ご指摘ありがとうございました。

・ページング処理可能なビューについて
GridView+ObjectDataSourceがページング処理を記述しなくてもよいという表現は誤りでした。
おっしゃるとおりデータ取得部分は自前です。
GridView+ObjectDataSourceがページング処理の見た目の処理を備えていたので
他にもこういう機能がないのかと思ったのですが甘かったみたいです。
手軽に、というのも理由の一つですが堅実なものを作成したいので既に備えている機能をわざわざ
実装するのは避けたかったため質問させていただきました。
素直に自作します。
今回は「2.DataListを拡張〜」を行いたいと思います。
Webに関しては特にわからない部分が多いため質問のレベルも低いかもしれませんでしたが、
重ね重ねありがとうございます。
02342162007/10/24(水) 02:25:50ID:???
当初>>216にてお尋ねしましたが
フレームは使用しなくなったことで別フレームへ動的に作成されたWHERE区を
渡す必要はなくなりましたが、
以前と同じくWHERE区をObjectDataSourceのSelectedMethodで指定された
メソッドに渡す必要があります。
以前は別フレームに文字列渡すから仕方なくSession変数に複数の条件から作成した
WHERE区を入れておいて、ObjectDataSourceのSelectedMethodで指定された
メソッド内でFill()する前にSession変数から取り出せばよいと考えていたのですが、
同じページ内のコントロールからWHERE区を作成するだけなのにSession変数を
使用するのに違和感を感じてきました。
もっと簡潔な方法ありませんか?
・フレームは使用していない単一ページ
・検索ボタンは検索したい方法が2つあるため、ボタンが二つある
 (TextBox1つと検索ボタンで構成されたALLサーチ機能と細かい条件を指定するための多数の入力コントロールと詳細検索ボタン)
・SelectedMethod内でWHERE区を動的に作成しようとするなら、どちらのボタンが押されての検索かわからないため、
 SelectedParameterに全ての入力コントロールをずらずらと並べることはできない
 SelectedMethod内でどちらのボタンが押されての処理か判断できないと思われるため
・ボタンのイベントでそれぞれ動的にWHERE区を作成し、Session変数に格納し、
 SelectedMethod内で受け取るという処理はトリッキーな方法に感じる

本件はSession変数を用いてデータの受け渡しをすることが一般的な処理方法でしょうか?
勉強で作成していますので動けばいい、というものを作ることはできないため
確認させてください。
「ObjectDataSource SelectedMethod 動的 WHERE」辺りの検索ワードでは
 今回のケースにあたるような情報を見つけ出すことができませんでした。。
0235nobodyさん2007/10/24(水) 02:28:26ID:???
>>225
同一セッションのリクエストは直列化されるってことだよ。
0236nobodyさん2007/10/24(水) 03:00:01ID:???
フレーム分割することによりユーザービリティが低下することって考えられないけどねぇ・・・。
検索エリアを固定を常表示することで解決できるけど、それならFrameでいいじゃんと思んだけど・・・。
あらゆる場面を検証したW3Cに反論する気はないけど、規約に反するからって単一画面で描画の
遅いメニュー表示されたら余計にイライラするけどwww
0237nobodyさん2007/10/24(水) 12:38:49ID:???
>>234
1.SelectMethodに全ての条件+処理フラグの引数を作る。
2.SelectedParameterに項目+ボタン区別用のhiddenをControlParameterとする。
3.ボタンを押されたらASP側のクリックイベントでhiddenにフラグをセットする。
4.ObjectDataSourceの中身で処理フラグによって処理を分ける。

「2.」「3.」はSelectParametersをasp:Parameterにしておいて動的に変更すれば
hidden項目自体要らない。
0238nobodyさん2007/10/24(水) 16:35:10ID:???
質問者に対する回答でもなくて、
ユーザービリティを自分が経験した事だけでしか想像できなくて、
わけ分からん描画の遅い早いを持ち出す、
的外れてる奴が出てきたなと。
0239nobodyさん2007/10/24(水) 23:22:33ID:???
お前ら全員死ねよ
0240nobodyさん2007/10/24(水) 23:27:23ID:???
過激なやつだ…
0241nobodyさん2007/10/25(木) 21:16:47ID:???
お前ら全員愛してる
0242nobodyさん2007/10/25(木) 21:39:46ID:???
キスして
0243nobodyさん2007/10/26(金) 00:57:34ID:???
屁こいてやったぜ
0244nobodyさん2007/10/26(金) 15:36:23ID:???
MSDN2みたいに、メニューバーエリアを選択したら、そのメニュー項目が
Popupメニューのようにフェードイン・フェードアウトして一覧表示される
にはどうすればよいですか?
0245nobodyさん2007/10/26(金) 17:05:56ID:???
>>244
1.MSDNのjavascriptを解析して組み込む。
2.Popup Menuのjavascriptライブラリを利用する。
 ASP.NETの場合は、HTML上に表示されるコントロールID(ClientID)をライブラリに割り付ける方法は考える必要があり。
3.ASP.NET AJAX Control ToolkitのPopupControlExtenderを利用する。
 ASP.NETのほかのサーバコントロールと同じように作成できるが、
 Javascriptが隠蔽されるとか、コントロールの使い方を覚えないといかないはとかで理論が分かりにくい。

PopupControlExtenderの場合は<Animations>にこんな感じで指定すれば動く。
<Animations>
<OnShow>
<Sequence>
<StyleAction Attribute="overflow" Value="hidden"/>
<StyleAction Attribute="height" Value="0"/>
<StyleAction Attribute="width" Value="0"/>
<HideAction Visible="true" />
<Parallel Duration=".2" Fps="15">
<Resize Height="50" Width="125" Unit="px" />
</Parallel>
</Sequence>
</OnShow>
<OnHide>
<Sequence>
<StyleAction Attribute="overflow" Value="hidden"/>
<Parallel Duration=".2" Fps="20">
<Resize Height="0" Width="0" Unit="px" />
</Parallel>
<StyleAction Attribute="display" Value="none"/>
</Sequence>
</OnHide>
</Animations>
02462162007/10/27(土) 14:04:47ID:???
>>237
この方法で実装できそうです。
前から気になっていたのですっきりしました。
「asp:Parameter」という部分が理解できませんが別途調べますね。
ありがとうございます。
0247nobodyさん2007/10/27(土) 17:04:02ID:???
>>246
SelectedParameter
<asp:Parameter Name="flg" Type="String" />

ボタン1処理
ObjectDataSource.SelectParameters.Item("flg").DefaultValue = "処理1"

ボタン2処理
ObjectDataSource.SelectParameters.Item("flg").DefaultValue = "処理2"

とすれば、hiddenを経由しなくても動的に値を変化させられる。
hiddenの方がコントロールを経由するので直感的かもしれんが、
無駄なhiddenを作る必要が無かったりするので。
02482162007/10/28(日) 16:18:54ID:???
>>247
せっかくヒントをいただいたので自分で調べようと思っていたのですが
ご丁寧にありがとうございます。
<asp:Parameter>
というのはGUIで作成するところで言う
パラメータソースが「None」のものですね。
Noneてどういう時に使うのかと思っていました。
こちらを組み込んだところ無事動作が確認できました。
ありがとうございました。
0249nobodyさん2007/10/29(月) 00:16:00ID:???
ASP.NETの勉強サイト、またはTips集のサイトを教えてください!!!
0250nobodyさん2007/10/29(月) 00:54:42ID:???
>>249
Tips集というかサンプル集
ttp://www.friendlysw.com/knowhow/knowhow.asp
ここのASP.NETサンプル
とか。

勉強サイトについては聞き方として漠然としてよろしくないと思います。
ttp://www.google.co.jp/search?hl=ja&q=ASP+%E8%A7%A3%E8%AA%AC&lr=
0251nobodyさん2007/10/29(月) 01:47:16ID:???
>>249
ほとんど分からないのなら
一通りの機能には触るので>>2のMicrosoft ASP.NET
クイック スタート チュートリアルを最初の項目から順
にやっていくといいよ。

ただ、>>2のリンクはasp.net 1.1版なので2.0の場合は
web上では公開されて無いので「ASP.NET 2.0 クイック
スタートチュートリアル」をインストールしてみるといい。

最低限このクイック スタート チュートリアルの内容が
全て分かって無いとTips集なんか見ても理解できないかも。
0252nobodyさん2007/10/30(火) 12:03:08ID:???
>>250-251
ありがとう。
0253nobodyさん2007/10/31(水) 06:14:37ID:Ln67m40J
テキストボックスに入力されている文字列が数値かどうか判断するために
ReularExpressionValidatorを利用しています。
VaridationExpressionプロパティに「^[0-9]+$」を設定したのですが
半角スペースをのみを入力した場合IsValidateがTrueを返してしまいます。
半角スペースが入力された場合の対応としてはどういう対処が必要でしょうか?
0254nobodyさん2007/10/31(水) 08:47:21ID:KCIK9HQ4
SQLServer2005への接続文字列で
DateSource:サーバー名\SQLEXPRESS
とSQLEXPRESSを付けないと接続できないけどこれは変更できるのでしょうか?
それともEXPRESS Editionを使用しているからでしょうか?
0255nobodyさん2007/10/31(水) 10:48:10ID:???
>>254
DBMSのインストール時に名前付インスタンスにしてしまったら無理
既定のインスタンスでインストールすればインスタンス名無しでいける
Books On Lineをインストール前に入手して読めばわかることなんだけどね
0256nobodyさん2007/10/31(水) 12:52:23ID:???
>>253
function RegularExpressionValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
var rx = new RegExp(val.validationexpression);
var matches = rx.exec(value);
return (matches != null && value == matches[0]);
}
function ValidatorTrim(s) {
var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
return (m == null) ? "" : m[1];
}
上から分かるように、Validatorはスペースのみと入力なしを区別してないので、
ASP.NET側の処理もTrimするなりで合わせとくとか、CustomValidator(ValidateEmptyText="True")で
自作するとか、Javascriptで同じfunction名で処理を上書きして書き換えちゃうとか色々。

>>254
ASP.NETと関係ないし。
http://www.microsoft.com/japan/msdn/sqlserver/express/ssesecurity.aspx
こことか参考にして理解した上で好きなようにしてください。
0257nobodyさん2007/10/31(水) 14:35:49ID:KCIK9HQ4
>>255
勉強になりました。
0258nobodyさん2007/11/04(日) 02:42:02ID:???
gridviewのrowを編集モードにして、値を入力する際に、
Javascriptを使用して、winodw.openで子ウィンドウを開いて、
そこから値を選択し、親windowの編集モード中のrow内のtextbox1に、
子Windowsで取得した値を入れたいのですが
detailviewには下記のようにして値を直接入れられるのですが、

−子windowで値選択時のコード−
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged

Dim str As String = GridView1.SelectedRow.Cells(1).Text

Dim strScript As New System.Text.StringBuilder
strScript.Append("<script language=javascript>")
strScript.Append("window.opener.document.form1.DetailsView1$TextBox1.value = " & str & ";")
strScript.Append("</script>")

RegisterStartupScript("window", strScript.ToString)

End Sub

gridview内のtextboxに入れようとすると
strScript.Append("window.opener.document.form1.GridView1$ctl02$TextBox1 = " & str & ";")
というように編集中のrow数を指定すれば入れられるのですが、
これはどうかと思い、別方法を考え
親側のform1内にhiddenコントロールを配置し、そこに値を渡してポストバックして、
page_loadでそのhiddenコントロールの値を編集中のrowのtextbox1に渡すことを考えたのですが
編集中のrow内のtextbox1への値の入れ方が分かりません。
page_load内にどのように書けば編集中のrow内のコントロールに値を渡せるでしょうか?
0259nobodyさん2007/11/04(日) 18:41:36ID:???
今手元に本がないので曖昧なのですが、
「Sessionには、〜と、シリアル化できるオブジェクト(?)を渡す事ができる」
と書いてあったと思います。
シリアル化とはどういう意味なのでしょうか??

あとエラー処理で
「エラーは多数の行のコードをtry,catchで囲むのではなく、エラーの起きる可能性のある
行を1行ごとにtry,catchで囲むのが良い」
と書いてあったように思います。
もし、1行ごとに囲むならば、Exceptionの詳しい内容を調べる必要があると思いますが、
Exception一覧、というが載っている資料もしくはURLがありましたら教えてください。

よろしくお願いします。
0260nobodyさん2007/11/04(日) 20:56:58ID:???
>>258
TemplateFieldを使って無いのならば、例外処理とか除いているが
CType(gridView.Rows(gridView.EditIndex).Cells.Item(1).Controls(0), TextBox).Text = "aaa"

>>strScript.Append("window.opener.document.form1.GridView1$ctl02$TextBox1 = " & str & ";")
>>というように編集中のrow数を指定すれば入れられるのですが、
>>これはどうかと思い、別方法を考え
row数を指定するんではなくて、
gridView.Rows(gridView.EditIndex).Cells.Item(1).Controls(0).ClientID
で現在編集中の行のHTML上のテキストボックスの名前が取得できるので
この値を利用してJavascriptを作り出せばhiddenコントロールもいらないと思う。

>>259
>>シリアル化とはどういう意味なのでしょうか??
http://e-words.jp/w/E382B7E383AAE382A2E383A9E382A4E382BA.html
.NETでなら、簡単に言えばクラスがISerializableインターフェイスを実装しているか。

例)DataTable
http://msdn2.microsoft.com/ja-jp/library/system.data.datatable(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/system.data.datatable_members(VS.80).aspx


ちなみに、セッションがInProcモード なら、シリアライズ不可能なオブジェクトも
セッション変数に格納できます。

>>Exception一覧、というが載っている資料もしくはURLがありましたら教えてください。
例外が発生する可能性のあるクラスのメソッドをMSDNで調べてください。

例)System.IO.File.Delete メソッド
http://msdn2.microsoft.com/ja-jp/library/system.io.file.delete(VS.80).aspx
0261nobodyさん2007/11/04(日) 21:21:19ID:???
>.NETでなら、簡単に言えばクラスがISerializableインターフェイスを実装しているか。
違うだろ。
0262nobodyさん2007/11/04(日) 22:13:07ID:???
>>261
今まで大した質問にも答えてもいないのにこう言った
揚げ足とりにだけ必死にならずに説明すりゃいいのに。
ISerializableが必須で無い理由など詳しく説明してあげてくださいな。
0263nobodyさん2007/11/04(日) 22:20:10ID:???
>>260
ありがとうございます
ISerializableインターフェイスですか!
セッションInProcモード初耳でした

エラー処理は一つ毎にExceptionを書くと面倒なことになりそうですね
みなさん(というか実際の業務では)どう書いているんだろう・・・
0264nobodyさん2007/11/04(日) 23:02:03ID:???
ISerializableはシリアライズ処理のカスタマイズ用インターフェイス。
シリアライズ可能であることを示すのはSerializable属性。
ISerializableを実装しててもSerializable属性がついてなきゃシリアライズ不可。
ISerializableを実装して無くてもSerializable属性がついてればシリアライズ可。
独自のシリアライズ処理を行いたい場合のみISerializableを実装する。
これで満足か?

0265nobodyさん2007/11/04(日) 23:04:46ID:???
>今まで大した質問にも答えてもいないのにこう言った
>揚げ足とりにだけ必死にならずに説明すりゃいいのに。

必死て、ていうか揚げ足じゃなくて間違ってんだろうに。
まあ俺は困らんけど>>259は困るんじゃないのか?
0266nobodyさん2007/11/04(日) 23:10:40ID:???
>ISerializableを実装して無くてもSerializable属性がついてればシリアライズ可。
あと、これはメンバが全部シリアライズ可能な場合など制限はある。
あと基底でISerializableを実装してる場合は派生でオーバーライドしなきゃならない場合もある。

あとInProcだと確かにシリアライズできなくてもいいんだが、
なんというか後々のことを考えるとシリアライズできるもののみにしといた方がいい。
0267nobodyさん2007/11/04(日) 23:12:34ID:???
>>265
いやだから揚げ足だろうが実際間違ってようが
間違ってるって言いたいならそれを書けよって言われてるんだろ?
「違うだろ」ってだけ書いてもなんの解決にもならないから。

261で違うだろっていって、そのままそこに何が間違ってるか回とけば良かったんだよ。
言われてから後発でこれでどうだって言うぐらいなら最初から言えよって話なんじゃないの。

なんにせよ無駄な時間だろ?
>>261の時点で理由も書いてりゃ>>262自体存在しねえんだから。
0268nobodyさん2007/11/04(日) 23:32:13ID:???
>>264
満足です。
まぁ、本当は「ISerializableを実装して無くてもSerializable属性が
ついてればシリアライズ可。」の揚げ足取ろうとしてたら、>>266
多分、>>261?が補足していたので消したけどね。

>>265
個人的にはSerializable属性を付ければシリアライズされますと言うのは
>>266のように単純では無い事もあるので、>>259がここら辺をあまり理解
していない物として、ISerializableで検索でもしてオブジェクトをシリアライズ
する過程を調べてもらおうと思ったんだがね。
だから、ISerializableインターフェイスを実装しているものが、セッションに
入れられますと言ったつもりは無いんだがまぁ、間違ってるといわれれば
仕方ない文章なのはすまない。

このスレ盛り上げようと、ほとんどの質問に答えてたのだが、もう少し勉強
しないと駄目だなw
0269nobodyさん2007/11/05(月) 00:02:19ID:???
>>265
意味不明。俺にとっては>>261の方がただの横槍なのか、
指摘してるのか分からんだけ>>259が困ると思うけどね。

そもそも掲示板なんて間違いを教えられる可能性もある事が
前提なんだから自分で調べるのは基本だろ。
0270nobodyさん2007/11/05(月) 00:36:53ID:???
そうか?
違うだろ、があるのと
何も無いんじゃ、
これから調べるにしても少なくともないより間違いにくいと俺は思うけど。
0271nobodyさん2007/11/05(月) 00:38:04ID:???
>>266のように単純では無い事もあるので、>>259がここら辺をあまり理解
していない物として、ISerializableで検索でもしてオブジェクトをシリアライズ
する過程を調べてもらおうと思ったんだがね。

こういうのは、お前が思ってるだけで特に分からないヤツには明確に書かてあげないと意図伝わらないだろ。
0272nobodyさん2007/11/05(月) 00:40:15ID:???
>>265>>262の後半のつまり説明しろに対して書いたんじゃなくて
余計なこというな、に見えた部分に対して書いたんだすまん。
0273nobodyさん2007/11/05(月) 00:46:15ID:???
今は大丈夫っぽいけど昔はシリアライズからみは間違った解説がいっぱいあったからな〜
XmlシリアライズするためにSerializable属性が必要とかISerializable実装するとか
Serializable属性ついてるのにXMLシリアライズできないバグがあるとか
上で出てきた話とかいろいろいろいろw
02742532007/11/05(月) 03:13:44ID:???
>>256
ASP.NET側とJavaScript側で動作が違うので
CustomValidatorを使用して自作することにします。
ありがとうございました。
0275nobodyさん2007/11/05(月) 08:54:54ID:???
>>270
ないない
そもそも、「これから調べるにしても少なくともないより間違いにくい」とか
思ってる奴なら詳細を説明しようとするもんだ。
0276nobodyさん2007/11/06(火) 06:57:01ID:???
これで満足か? きめぇwwwwwwwwwwwww
0277nobodyさん2007/11/06(火) 18:19:56ID:???
既出かもしれませんが、とりあえずこのスレのはじめからは読みました。

PageA⇒PageB⇒PageA' と遷移したとき、PageA'に戻ったときに、
PageAの状態をそっくりそのまま復元する方法は、はやりViewStateを
Sessionに保存するのが一番いい方法でしょうか?
いろいろ探して http://d.hatena.ne.jp/entlib/20070221/1172058201 をみつけたのですが、
どうもASP.NET Ajaxを使用しているせいか、
「このページ状態は無効です。壊れている可能性があります」
とエラーが表示されてしまいます。
ヒントとなるようなソースもしくはサイトをご存知でしたらご教授いただけると助かります。

また、個別のコントロールをSessionに保存する方法でも結構です。

どうぞよろしくお願いします。
0278nobodyさん2007/11/06(火) 18:25:38ID:zErdHZrx
↑環境を記述するのを忘れていました。
開発環境
 WindowsXP Pro
 VS2005Pro
 C#
 ASP.NET Ajax
です。

初代VS.NETからサポートに入っていますが、今だによく分かっていませんorz
0279nobodyさん2007/11/09(金) 08:54:04ID:AOsg/er1
VS2005のASP.NET(VB.NET)でWebページを作っています。
デフォルトの設定だと半角の「\」(円マーク)が出ないので、globalizationをShift_jisにしたのですが、
今度は全角の「〜」(波線)が?になってしまいます。
ASPで作っていたときは特に表立った問題は起きなかったのですが、ASP.NET下で両立させる
設定はできないのでしょうか?
OSはWinXPと2K、ブラウザはIE6です。
パッチ類は一通り当たっている状態です。
0280nobodyさん2007/11/09(金) 23:45:36ID:???
¥
0281nobodyさん2007/11/10(土) 21:52:12ID:IaYZNmi9
〜(波ダッシュ)は化けないでしょ。?全角チルダ(XPや2Kでは下がって上がる波の形)は駄目だけど。
UTF-8でも5Cをバックスラッシュではなく円マークで表示する日本語フォントにすればいいかもね。

文字コード関係の知識がないとこれからも困るだろうに。
0282nobodyさん2007/11/11(日) 10:03:08ID:???
>>281
レスどうもです。
それが、JISだと「〜(IMEをOnにして~)」を入れると?で表示されるんです。
また、UTFにすると表示はされますが、ここで見えるようなきれいな形の〜ではなく、汚い
フォントの全角チルダ?になっているようです。
どこかで表示フォントを指定する必要があるのでしょうか?
同一Webサーバー内で動いているASPの方はそんなことお構いなしで表示できているのに、
.NETだとダメなのでサーバーに依存しているわけではないというのは判るのですが・・・。
ASP.NETは始めたばかりで、いろんなことが便利に使える反面、複雑で判らないことが多く
かなり苦労してます。orz
0283nobodyさん2007/11/11(日) 12:06:32ID:???
ブラウザの言語設定がおかしいとかじゃねーの?
02842792007/11/12(月) 13:14:42ID:???
「〜」が「?」になるのはOracleの問題でした。
あまりかしこいやりかたではありませんが、globalizationをShift_jisにして\が出るようにし、
DBへの接続をODP.NETからOLEDBに変更して対応させました。
コメントしてくれた方々、ありがとうございました。
0285nobodyさん2007/11/13(火) 23:29:46ID:JHc7eDB0
Response.Cookiesでクッキーの値を取得できますが
サーバサイドでクッキーの値を扱うということは
クッキーの内容を全てサーバに送信してるってこと?
0286nobodyさん2007/11/13(火) 23:41:38ID:???
そうです。
0287nobodyさん2007/11/14(水) 01:18:40ID:???
微妙に不思議な表現だなw
0288nobodyさん2007/11/14(水) 17:35:47ID:???
GridViewにSQLserverからSELECTしてきたデータをバインドしたいです。
テキストボックスの値をWHERE句に読み込んで…という形なのですが、
SQLcommand.Parameters.AddWithValue("@hage",hage)
というようにすると、このあとデータセットで返すことが出来ず、バインドできません。
普通にテーブルアダプタ作ってFillする方法だと、今度はAddWithValueが使えずセキュアになりません。

一応、データセットデザイナだか何だかのGUIウィザードで
パラメータ有のバインドが出来ましたが、
コード上でどうにかできないでしょうか。

SQLCeCommandにはResultSetという
バインド可能なオブジェクトを返せるのがあるようなのですが…
0289nobodyさん2007/11/14(水) 17:54:37ID:jLRgJntu
VS2005のASP.NET(VB.NET)を使っています。

databindでラジオボタンが複数選択できてしまうので
単一選択ができるカスタムコントロールを作ろうとしています。

http://www.microsoft.com/japan/msdn/asp.net/tips/CustomControl/

この通りにやって、サンプルのコードをコピペすると、
Imports System.Web.UIが見つからない、というエラーが起こります。
新規のプロジェクト作成時のパスは今のアプリケーションルートの下で
いいのでしょうか?
0290nobodyさん2007/11/14(水) 18:40:57ID:jLRgJntu
>>289で書きこんだものです。
単純に参照設定ができてなかったようです。
追加で参照設定をしたところ読み込めました。
0291nobodyさん2007/11/14(水) 21:36:10ID:???
.NETでお絵かき掲示板を作ろうと思っています。
お絵かき部分のJavascriptは検索していくつか候補があるんですが、
その結果をどうすれば反映できるのかが分かりません。
Javascriptの内部で画像として保存、それからリンクを張るとかだとUI的に面倒なので
Canvasに絵を描く、コメントを打ち込む→投稿ボタンを押す
だけで一気に画像の保存からコメントの投稿まで終わらせたいと思っています。
が、コメントはテキストボックスにいれておけば、ボタン押下でPOSTされてきますが
JavaScriptのCanvasに描かれた絵の部分は一体どこから取得すればいいんでしょう?
そもそも絵のデータは一体どこに保持されているんでしょう。
0292nobodyさん2007/11/14(水) 21:38:05ID:???
方法として2種類考えています。
SVGのデータとして結果をDBに格納してそれを表示時に再反映する方法。
投稿の時点で画像としてサーバに保存し、そこにリンクを張る方法。
別にどちらでも構わないんですが、どちらの方が簡単に実装できそうでしょう?
0293nobodyさん2007/11/29(木) 09:52:52ID:???
GridViewの条件検索でDropDownListを使っています。
静的項目として「すべて」という項目を作り、
AppendDataBoundItems=trueにしています。
SqlDataSourceのSQL文のWHEREの対象句が文字列であれば
例:「…WHERE (Book like @Book)」として項目「すべて」のValueを「%」に
しておけば、選択されたらすべてが表示できるのですが
以下のように、対象句がIntの場合

SELECT ID, Book FROM tbl_Book WHRERE (ID = @ID)

DropDownListで「すべて」が選択された場合にすべてを表示
させる動きにするにはどのようにしたらいいのでしょうか?
使用しているデータベースはSQLSERVER2005EXPRESSです
0294nobodyさん2007/11/29(木) 17:46:04ID:rMbVmK8t
SelectionChanged かなにかのイベントで
場合分けしたらいいんじゃないのかな。
0295nobodyさん2007/12/04(火) 14:38:47ID:l2Tev5nw
ASP.NETで画面をHTMLで作成する時、Labelがずれちゃったりテーブルの高さが
おかしくなったりするんですけど、これってどう対処すればいいですかね?
Widthを調整したり、全角と半角で微調整ってのは一応わかってるんだけど他に何か
うまいやり方ってあるかな?
0296nobodyさん2007/12/04(火) 18:19:09ID:l2Tev5nw
295です。
画面設計についてはVisualWebDeveroperのヘルプに書いてありました。
ネットで検索するよりヘルプの方が情報量多いね。盲点だった。
0297122x218x24x97.ap122.ftth.ucom.ne.jpfieojfefe2007/12/05(水) 11:39:13ID:bGekTFEd
e
0298ヘルプ2007/12/07(金) 00:22:59ID:???
誰かわかる方がいらしたら教えてください。
ASPを使ってネットワークフォルダのファイルを参照したいのですが、うまくいきません。
認証はwindowモードでユーザ偽装をおこない、iiSの統合windows認証のユーザに偽装します。
そこでエクスプローラで
\\マシン名\フォルダ名だと参照できるのに同じユーザでASPにてファイルを参照しようとすると権限にてはじかれます。
どなたかわかりましたらお願いします。
0299nobodyさん2007/12/08(土) 11:13:53ID:???
ふらっとで質問したのですが、こちらで聞いた方が良いと誘導されてきました。
あるプロトコルでチャットに接続し、ユーザはIEの画面を通して発言したり
他者の発言を取得して画面を更新したりするプログラムを作りたいと思っています。
以下のような構造になるのかなと考えています。

【ユーザ】←HTTP→【画面側プログラム@】←なんらかの方法→【プログラムA】←→インターネット
@:
ASPで、他者の発言の取得はn秒ごとにポーリングを行う。
(サーバプッシュ型にできればなお良い)
A:
EXEにしてサービス化?ともかく常時起動しており、チャットには繋がりっぱなしにする。
@の状態には依存しない。
ASPにして@と同化させると、ユーザが画面を開くたびにインスタンスが新しくなってしまうのと
ユーザが画面を開かなければインスタンスを作れないので分ける必要がある(と思っている)

そこでよく分からないんですが、まず、IISの起動と終了のイベントを拾って
プログラムを動かすことができるのでしょうか。
可能なら、@とAを一緒くたにして、IIS起動でチャット接続して、その状態をstaticメンバにして
全インスタンスで共有し、終了で切断するということでASP一本にできると思ってます。
これは可能でしょうか。

もう一つ、分ける場合には@とAで情報のやりとりをする必要があります。
Aでインタフェースを提供し、@はそれを呼び出すだけという形にしたいです。
@から見たときに利用を簡単にしたいので、できればWebサービスとしてインタフェースを
提供できないかなと思うのですが、AがASPじゃなく普通のEXEの時に、AでWebサービスを
実装するにはどのようにすればいいのでしょうか。
(AがASPなら、IISが良きに計らってくれますが…)
また、Webサービスが無理ならどういう方法で通信するのがベターでしょうか。プロセス間通信とか?

妄想段階なので曖昧な点が多いのですが、アドバイスをいただければ幸いです。
よろしくお願いします。
0300nobodyさん2007/12/08(土) 22:03:20ID:???
@のApplication_StartでAの処理開始すりゃいいんじゃねーの普通は。
0301nobodyさん2007/12/08(土) 22:20:28ID:???
ありがとうございます。
ちょっと確認させてください。
Application_Startは、IIS起動後最初のユーザがページにアクセスして、
一つ目のインスタンスを作る時に発生。
Application_Endはすべてのセッションが切断された時に発生。
という認識であってるでしょうか。
できれば、IISからWebサイトを起動した時と停止した時にイベントを拾いたいのですが、
そういうイベントはありませんでしょうか。
0302nobodyさん2007/12/08(土) 23:10:32ID:qOs8ePBr
今日からASP.net始めました。よろしくお願いしますw
すみません。厳密にはVisual Studio 2005の使い方になってしまうかもしれませんが……。

ASP.netで使用中のデータベースの内容を見ようとしたのですが、サーバーエクスプローラの「データ接続」から.mdfファイルを開く(データベースに接続する)ことが出来ません。
「ユーザーの既定データベースを開けません。 ログインに失敗しました。
ユーザー 'hostname\username' はログインできませんでした。」
というダイアログが表示されます。
接続文字列内でAttachDbFilenameでファイル名を指定しUser Instance=Trueとして接続すると、こういう使い方は出来ないのでしょうか?
0303nobodyさん2007/12/08(土) 23:12:09ID:???
一つ目のインスタンスってなんのこと?
Application_Endはアプリケーションがシャットダウンされるとき。
通常はユーザのアクセスが一定時間無かったとき。
サイト起動時ってのはASP.NET側ではない(まだ動いてもいないから)

サイト起動時にやらないといけない理由があまり見当たらないんだが…
03043022007/12/08(土) 23:12:38ID:???
追伸です。
まだSelect文しか流してはいませんが、ASP.net側ではとりあえず接続は出来ているようです
>問題のデータベース
0305nobodyさん2007/12/08(土) 23:14:08ID:???
>>302ASP.NETで使用中とは、IISで運用中ってことかい?
IISで動作中は、例えばIIS6だとNETWORK SERVICEユーザが使用中だから、
User Instance=Trueでは使えないはず。
0306nobodyさん2007/12/08(土) 23:23:50ID:???
>>303
ユーザが画面を開いていないときでも、チャットには繋げっぱなしにしたいのです…。
とりあえずWebサーバ起動時に繋げにいって、チャットの書き込みをサーバのログに吐く。
ユーザは必要な時だけWebサーバにアクセスするという形で。

自分だけが使うものなので、最悪、起動時は必ず画面を開いてApplication_Startを
呼んでやるという形でもいいのですが、終了時はApplication_Endでチャット切断処理を
やってしまうと、ユーザからのアクセスが無いときに勝手に接続が切れてしまうので…。
かといってどこかに明示的な切断を入れないと、アプリ終了後もタイムアウトするまで
チャットに居座りっぱなしになる行儀の悪いプログラムになるなあと。

ユーザの状態に依存しない開始と終了イベントを取れれば、
ユーザは必要な時だけWebサーバにアクセスし、ユーザはサーバ側のチャットへの
接続状態を気にしなくて済むようになり、サーバ側もユーザの接続状態を
考えなくて済むようになると思いまして。

画面側にはWebサービスとして、チャットで発言するメソッドと、画面更新のために
最新のチャットログを取得するメソッドくらいを提供してやればいいかなと。
03073022007/12/08(土) 23:31:32ID:???
>>305
早速のお返事どもっす。
こーゆー使い方したかったらちゃんとSQL Server動かせってコトなんですね
……まぁ、「AttachDbFilenameでファイル名を指定しUser Instance=Trueとして接続」するのが「ちゃんとしていない」ってコトはないんでしょうが……。
要はPHPのSQLiteとかJavaのHSQLDB(のスタンドアロンモード)と考えればOKかな?
手軽には使えるけど、ちょっとイヂりたいとかの場合は不便ですなぁ。
0308nobodyさん2007/12/09(日) 00:53:07ID:???
んーUser Instance=Falseじゃだめなのけ?
0309nobodyさん2007/12/09(日) 00:57:02ID:???
>>306
ようわからん、サイト起動時に接続するんじゃ
もはや切断なんて関係ないレベルですでに十分行儀悪いと思うが。
どうしてもそんな風にしたいんならサービス作るしかないんじゃない?
0310nobodyさん2007/12/09(日) 05:00:17ID:???
むぅ
ちなみにEXEで作ってサービス化した場合、その中でWebサービスとして
メソッドを提供することは可能でしょうか?
それとも、WebサービスにしたいのならASPで作らないとダメでしょうか。
03113022007/12/09(日) 09:59:21ID:???
>>308
ダメみたいですねー。今度は本体(ASP.net側)でエラーが出ます
>User Instance=False
0312nobodyさん2007/12/09(日) 18:17:59ID:???
Application_Endが呼ばれた後って、Applicationオブジェクトに格納していた
オブジェクトはどうなります?
要するに、ユーザがしばらくアクセスしなかったら、破棄されたりします?
0313nobodyさん2007/12/09(日) 20:29:55ID:???
Application_Endが呼ばれるってことはそういうことだ。
まあtimeoutを伸ばすとか終了させないようにする手もあるが、
普通は必要ない。
0314nobodyさん2007/12/09(日) 20:37:11ID:???
んー、ようするに、ASPでユーザの状態によらないオブジェクトの維持は無理ってことですかね?
例えば、今日一日のアクセス数を返すようなWebサービスは、変数をファイルに
書き出して保持しないと維持できない訳ですよね?
一番生存期間が長い(と思う)Applicationも、ユーザのタイムアウトによる
Application_Endで破棄されるみたいですし。
0315nobodyさん2007/12/09(日) 22:29:07ID:???
だからリサイクルの設定をみんなオフにする手はあるが、
どっちにしても保証はされてないから結局Endで保存、
Startで読み込みとかは必要になる。
0316nobodyさん2007/12/09(日) 22:30:01ID:???
あ、いや、Endで保存、Startで読み込みは微妙だな、うまくいかない可能性がある。
03173022007/12/09(日) 23:04:34ID:???
たびたび申し訳ないっす。
TableAdapterを試そうとして少々苦戦しています。
VisualStudioでのビルドは通るのに、実行時に型または「名前空間名 'hogeTableAdapters' が見つかりませんでした」って出るのはどうしてでしょう?

……TableAdapter自体もよーわからんっす。Fillした後、どうやってデータを取り出せばいいんだろう?
「ASP.net 2.0 実戦プログラミング入門」という本を参考にしていますが、あまりいい本ではありませんね。
ちょっと後悔。
■ このスレッドは過去ログ倉庫に格納されています