【質問】ASP.NETスレ Part5【議論】at PHP
【質問】ASP.NETスレ Part5【議論】 - 暇つぶし2ch486:nobodyさん
09/06/29 23:30:27
>>485
すべてのページでgetを受け取れるようにしたいのか、
すべてのページのハイパーリンクにgetのクエリを付与したいのか
詳しく書いてくれないと何とも言えない。

でもuseridが変更されるとこまると思うから常識的にはsessionを使うべきだと思う

487:nobodyさん
09/06/29 23:35:02
>>486
説明不足でした。getのクエリ文字列に追加したいのです。

sessionを使うのが普通なのは承知していますが
環境の都合上使用ができないのです。(クライアントのCOOKIEも)


488:nobodyさん
09/06/29 23:42:59 fVwdImLx
また、言葉足らず・・・
sessionを使用ができないのではなく、
sessionだけではなく、GETのクエリ文字列にもパラメータが必要ということでした。

489:nobodyさん
09/06/29 23:49:37
>>488
response.redirectでやると思うが、?userid=xxxxって追加する専用メソッドを入れたらいいんじゃない?

追加メソッド(string url){
 return url+="?userid="+this.userid;
}

みたいな感じで、useridがどこにあるのか知らないけど

どなたか>>478もお願いしますm(_ _)m

490:nobodyさん
09/06/30 00:00:00
>>489
やはり、その方法しかないですかね?
useridはIIS上で保持しています。

URLに付加された状態でProxyを通過させたいんですよね・・・
(言葉足らずで情報が小出しになってしまい申し訳ないです)

491:nobodyさん
09/06/30 00:31:17
プロクシを通過させると何か問題なの?


俺ならSystem.Web.UI.Pageを継承するクラスUserPageを作成して、
private int UserIDみたいなメンバ変数と
public void Redirect(string url,)みたいなメソッドをを作成して
urlとUserIDからRedirectさせるようにする

んで、そのクラスを継承するページを設定するかな?
public partial class Default : UserPage
みたいな感じで
そうすれば各ページでuseridを取得するルーチンを書かなくて済むし、
現状のresponse.redirectをUserPage.Regirect(string url)に置換するだけで済むし

492:nobodyさん
09/06/30 01:25:00
>>478

public class Person
{
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}

private int age;
public int Age
{
get { return this.age; }
set { this.age = value; }
}
}

[WebMethod]
public List<Person> GetPersonList()
{
List<Person> aaa = new List<Person>();
aaa.Add(new Person { Name = "Taro", Age=8 });
aaa.Add(new Person { Name = "Jiro", Age = 7 });
return aaa;
}

でとりあえず動いてるみたいなんだが、どんなエラーなんだ?

493:nobodyさん
09/06/30 01:26:01
半角スペース消えるの忘れてた・・orzスマソ

494:479
09/06/30 09:14:08
>>482,484
ご教授ありがとうございます。おおよその動きは理解出来ました。

>AJAXを使えばJavaScriptでも簡単にできるかもしれないけど、
AJAXは使っています。
その場合、提示された処理より簡単に実装出来るのでしょうか?
出来ればこちらのやり方も教授頂けると嬉しいです。

>>483
ご教授ありがとうございました。 

495:478
09/06/30 10:15:56
>>492
ありがとうございます、新しいページで作り直したら動きましたorz

496:nobodyさん
09/06/30 16:05:45
>>494
AJAXなら、フォームからフォーカスが外れるたびに入力内容をチェックしにいって、
重複か重複でないかをチェックして、ScriptManager.RegisterStartupScriptで
JavaScriptで定義した変数にbool値を格納する
例 var isDuplicate = true;

登録ボタン押下時に、JavaScriptでisDuplicateの変数内容によって、
onSubmitで表示するconfirmの表示文字を変更させればいい。
cancel時にPostの処理を中止するのはどちらも同じだから。

497:479
09/06/30 17:26:30
>>496
ご丁寧にありがとうございます。
482,484を実装し、期待する動作は確認出来ました。
作成しデバッグしている最中にASPの制御、と言うかスタンドアロン(VB)との違いが良く分かりました。
(それにより)496の内容もすぐに理解出来ました。応用させて頂きます。
ご教授頂いた事に感謝致します。
本当にありがとうございました。

498:nobodyさん
09/07/01 17:57:52
MSの開発技術大全のASP.NET編で、SQLDataAdapterコントロールが
デザイナにD&Dできるみたいな記述になってるけど、VS2005や2008でも出来たっけ?

499: [―{}@{}@{}-] nobodyさん
09/07/01 18:29:24
>>498
SqlDataSourceとかObjectDataSourceコントロールの事じゃないか

500:nobodyさん
09/07/02 20:39:30 ZUKdZhY7
ASPでjavascriptを使わずにあるボタンを押したら、とあるテキストボックスに1を入力するっていう処理をやりたいのですが、
今まではポストバックさせてやっていたのですが、そうするといちいち画面が切り替わるのがうっとうしいので画面が切り替わらないで処理をやりたいです。
可能でしょうか?

501:nobodyさん
09/07/02 20:54:55
不可

502:nobodyさん
09/07/02 21:15:02 ZUKdZhY7
>>501
ありがとうございます
そうですか、あきらめてjavascript使うしかないですね



503:nobodyさん
09/07/02 21:46:24
1って入力してもらう

504:nobodyさん
09/07/02 21:51:06 ZUKdZhY7
目的は1を入力した状態にしたいのではなくて、テキストボックスをreadonlyにしたいのです。

javascriptで実装するにはどういうコードを書けばいいのでしょうか?

505:nobodyさん
09/07/02 21:57:01

マジレスすると、TextBox.Textに1を入れた後にTextBox.ReadOnlyにtrueを設定

506:nobodyさん
09/07/02 21:59:45 ZUKdZhY7
ポストバックさせたくないんですよ

507:nobodyさん
09/07/02 23:41:47
AJAX使いなよ
ポストバックしてるけどしていないような感じで実現できるから

508:nobodyさん
09/07/02 23:48:58 ZUKdZhY7
一番簡単に実装するには何がいいでしょうか?
当方VB、Cの経験しかありません

509:nobodyさん
09/07/02 23:56:35
そろそろスルーで

510:nobodyさん
09/07/03 00:01:26
WebアプリなのにJavaScriptもポストバックもだめとかそもそもが間違ってるよな。
スタンドアロンアプリでも作ってろよ

511:nobodyさん
09/07/03 00:11:41 WYeGS7LZ
しょうがないじゃん、最近はじめたんだから。
radiobutton_checkedイベントやdropdownlist_chengedindexイベントでいちいち画面がロードされるのうざいでしょ?


512:nobodyさん
09/07/03 00:30:44
>>499
いや、SqlDataAdapterだ。俺の目が腐ってなければ・・

ちなみにいまVS2008で試したがグレーアウトでデザイナにはドロップできない。
VS2005ではできるか試してもらえる人はいるだろうか。

グレーアウトになってるってことは使うなってことだよなぁ
手打ちでコーディングはできるんだから。

513:nobodyさん
09/07/03 01:20:01
silverlight使えよ。

514:nobodyさん
09/07/03 01:41:25
>>511
>しょうがないじゃん、最近はじめたんだから。
ブラウザは散々使っているんだろうから、その経験則から何が実現可能か不可能か判断できずに、
最近始めたばかりだと開き直るようじゃあ、あなたにWebアプリは向いてないよ。

↓お好きなのドゾ
Silverlight Flash Ajax ActiveX JavaApplet

>>512
標準ではツールボックスにSqlDataAdapterの表示がないんだが、
どれを参照すれば表示されるん?

515:nobodyさん
09/07/03 01:52:55
>>514
コントロールツールボックスを→クリで「全て表示」とかなかったっけか

516:nobodyさん
09/07/03 13:20:41
>>512
2005は手元に無いからわからんが、2003なら出来るな
データアダプタ構成ウィザードが立ち上がってきた

517:500
09/07/04 00:48:45 gSOLs+sG
いろいろ調べた結果ユーザーコントロールを使用することにより実装することができました
ここって結構無知が多いんだな

518:nobodyさん
09/07/04 01:41:16
PostbackもJavaSciptも使用せずに動的に変更なんてできませんよw

519:nobodyさん
09/07/04 01:43:34
だなぁ、多分ASP.NET自体を新しい概念で開発したんだろうなw
その場合.NETって名前そのものが変わると思うけどw

520:518
09/07/04 01:50:28
>>519
無知で結構だから、もし実現できるのなら教えてほしいよ

何を勘違いしたんだろうな。
ユーザコントロールつかってもポストバックはするし。
ユーザコントロールはJavaScriptの実装には不向きだから、
AJAXでも実装したんかな?

521:nobodyさん
09/07/04 02:05:56
ICallBackEventHandlerで勘違いしたに20000000000ジンバブエドル

522:nobodyさん
09/07/04 02:19:19
JavaScriptおもいっきしつかっとるやんw
つか、それならAJAX使ったほうが楽でしょ

523:nobodyさん
09/07/04 04:29:22
要は画面が切り替わったのに気付かなければいいんだろ?
つ Page.SmartNavigation

ASPとASP.NETは別物だからちゃんと区別して書こうな
ホントにASP.NETじゃないASPの話だったらスレ違いだがなw


524:nobodyさん
09/07/04 09:47:11
>>517
UpdatePanelで勘違いしたに30000ペリカ

525:nobodyさん
09/07/04 16:47:14
>>523
聞いたことがないと思ったら2.0以降でDeprecatedか

526:nobodyさん
09/07/04 17:25:28
ここ最近みてると、

ASP.NET→JavaScriptの関数の実行(引数引き渡しも含む)
JavaScript→ASP.NETのメソッドの実行(引数引き渡しも含む)

という需要が多そうだな

527:nobodyさん
09/07/05 11:58:29 Km3uJP2Y
HTMLデザイナの表示をカスタマイズで
カラムの幅を狭めると、

デー
タバ
イン
 ド

みたいになって縦長になってウザイっす。。
なんで「データバインド」なんて意味のない文字列を表示させるのかな。
これを消したいです。なんか方法ありませんか????

528:nobodyさん
09/07/05 14:08:13
データバインドであることがわかるし、
縦長になるとデザイン上の狂いのあることが発見できることもある
ウザイときもあるが表示のおかげでデザインの狂いを修正できたことが何度かあるよ

従って一長一短

529:nobodyさん
09/07/05 14:18:45
んなのMSに聞けばいいだろ?
ここはお前のVSサポートセンターじゃねえ

530:nobodyさん
09/07/05 14:22:06
このスレの存在意義なくすなよカス

531:nobodyさん
09/07/05 14:33:29
2chで煽るのが僕のレーゾンデートルですw

532:nobodyさん
09/07/05 15:11:29
>>528
なるほど。そういう物だと理解します。

533:nobodyさん
09/07/05 15:32:32 Km3uJP2Y
GridViewのHyperLinkFieldに対して、2個のSQLのカラムを使って、DataTextFormatStringを作りたいです。

以下のSQLで抽出した2個のカラムを結合した文字列をハイパーリンクに表示させたいです。
select fig_name, fig_number from figure

これで抽出できるのはおのおの、
・fig_name:
'図'と'表'のいずれか
・fig_number:
図表番号。数字。

とします。

そしてハイパーリンクにはこの2個をくっつけて

“図1”とか、“表2”とかにしたいです。

とりあえず、以下のようにやったけどだめでした。。
DataTextField="fig_name,fig_number"
DataTextFormatString="{0}{1}"

どなたか、ヒントでも結構ですのでよろしくお願いします。。

534:nobodyさん
09/07/05 17:32:49
>>533
簡単に思いつくのは、TemplateFieldで自前で追加

535:nobodyさん
09/07/05 17:55:40
SQLのクエリで自前で合成したフィールドを作ればいいんでないの
SELECT (Table.fig_name + Table._number) AS fig_fullname FROM Table
とか。

でもこれだとSQLDataSourceが使えなかったり、
GridViewの編集や削除が使えない可能性があるから嫌われそうだけど。
>>534のTemplaterFieldにしても編集とかできなさげ。

んで、結局、編集、削除、追加は自前で実装して、
どうせ実装するならRepeaterでいいじゃんということに落ち着く流れになりそう。

536:nobodyさん
09/07/05 21:51:56
>>534,535さん
ありがとうございます。
RowCreateでデータベースから抽出された結果にアクセスできたので、
そこで文字列をつくって、ハイパーリンクに貼り付けました。
やりかたはダサイかもしれませんが、まぁまだ素人なので。。

537:nobodyさん
09/07/06 00:03:42
ユーザーコントロールのIDを取得したいのですが、どうすればいいのでしょうか?

538:nobodyさん
09/07/06 00:41:21
ClientID

539:nobodyさん
09/07/06 01:25:51 bdwzJZ3p
UpdatePanel凄すぎワロタ。やっぱMSはすげーなぁ。

540:nobodyさん
09/07/06 06:49:00
>>524
おめでとう どうやら君が真のエスパーだったようだ

541:nobodyさん
09/07/06 10:36:39
開発技術大全って.net 3.5以降とかのは出版されてる?

>>516とかみるとかなり古そうだが。。

542:nobodyさん
09/07/06 12:44:03
開発技術大全は記述されてるフレームワーク関連は古いが、
それ以前のASP.NETのアーキテクチャに関する仕組みを知りたいということなら
そんなに色あせないで見ることが出来る。

データベース関連ならADO.NETとLink To Entitiesの本を買うべきだし、
コントロールの使い方ならもっと別の本を買うべき。
それに、どうせいろいろやりたくなると、
DataSet+Repeaterコントロールに落ち着くことになるからね

543:nobodyさん
09/07/06 18:51:33 /VP1pSJi
テキストボックスのIDをascxからaspxに持ってきたいんだけど、string型になっちゃうのは仕様なんですが?
textbox型で持ってくることは出来ないのでしょうか?
ctypeで変換しようとするとstring型はtextbox型へ変換できませんってでます

544:nobodyさん
09/07/06 19:01:42
無知な俺らに聞いても無駄だと思うが
ユーザコントロールを作るということは、新しいクラスを設計するということ。
ユーザコントロールにサーバコントロールを配置するということは、
そのクラスのメンバ変数にサーバコントロール型のオブジェクトを
privateのスコープで持つということと同じなので、
ユーザコントロール側で、そのテキストボックスのインスタンスを公開するプロパティを宣言すればいい。
そうすれば、ユーザコントロールに配置したテキストボックスのIDは知る必要がない。

でもそれだと隠蔽の意味がなくなってしまうので、
外からでも変更可能なプロパティだけを
ユーザコントロールのプロパティとして再定義して公開するのが普通のやり方。

545:nobodyさん
09/07/06 19:11:22 /VP1pSJi
>>544
つまりどういうことですか?
コードで書いて教えてください
・user.ascx
protected sub name () as textbox
get
return txtname.clientID
end get
end sub

・main.aspx
dim TextName as textbox = name
TextBox.text="Test"

今はこんな感じで書いていてだめになっています

546:nobodyさん
09/07/06 19:32:14
無知だからVBはわからないがC#だと
public string Text
{
 get { this.TextBox.Text = value; }
}

547:nobodyさん
09/07/06 19:35:52
ああget→setかな
すまん無知で

548:nobodyさん
09/07/06 19:37:50
Protected ReadOnly Property name() as TextBox

Get
Return txtname
End Get

End Property

でいいんちゃうか。


549:nobodyさん
09/07/06 19:41:53 /VP1pSJi
>>548
txtnameだけでIDを送ることができるんですね。
ありがとうございました。

550:nobodyさん
09/07/06 19:43:38
>>548
少なくともユーザコントロールで、所有してるオブジェクトをそのままプロパティで公開するのは止めたほうがいいよ

551:nobodyさん
09/07/06 19:57:47
それは分かってるがID:/VP1pSJiが何をしたいか分からんことには。。

552:nobodyさん
09/07/06 20:16:06 /VP1pSJi
すいません>>545がちょっとまちがっていました
・user.ascx
protected sub name () as textbox
get
return txtname.clientID
end get
end sub

・main.aspx
dim TextName as textbox = name
TextName.text="Test"

つまりユーザーコントロールにあるコントロールをaspx側で操作したいというこです

553:nobodyさん
09/07/06 20:19:06
だからコントロールのプロパティをUserControlのプロパティとして公開しなさいっての

554:nobodyさん
09/07/06 20:21:29 /VP1pSJi
>>553
どうやるんですか?

555:nobodyさん
09/07/06 20:57:29
>>554
>>546-547

556:nobodyさん
09/07/06 22:05:11 Igs6oFx6
質問させてぇ~

「無効なポストバックまたはコールバック引数です。
イベントの検証は、構成の <pages enableEventValidation="true"/>、
またはページの <%@ Page EnableEventValidation="true" %> を使用して・・・」

っていう糞長いエラーが。。

状況はMultiViewの中のViewのなかのGridViewのなかに配置したTemplateField(イメージボタン)
に、
CommandName="delete"
OnClientClick="return confirm('削除してよろしいですか?');"

ってプロパティ設定をして、ゴミ箱のイメージボタンをおしたら削除されるようにしたわけ。

で、さらにこのGridViewのイベントハンドラを以下のようにしてるわけ。
OnRowCommand = "GridViewMeans_RowCommand"

で、このイメージボタンを雄と件のエラーが発生します。。。

そもそもこのエラーって何を意味するの?
「ぽすとばっくやコールバックのイベントが、それをレンダリングしたサーバコントロールから由来するとだめ」
しかもセキュリティの理由から??
意味が分からない。
意味が分からないから対処方法も想像できない。単にenableEventValidation="false"にすればいいよ、とか
意味も分からず闇雲にトライエラーしたくないし。
だれか、ずばっと、こういうパラダイムがあるから、それを解決するためにこういうセキュリティ上の配慮が必要で、そのために
チェックしてるんだ!!!とか男らしい回答求む。

557:nobodyさん
09/07/06 22:24:58
>>556
URLリンク(techbank.jp)

558:nobodyさん
09/07/06 22:53:47
>>557
ご回答ありがとうございます。
するってぇと、何でImageButtonをViewStateに保存しちゃまずいんですかね?
そういうモノだから??

559:nobodyさん
09/07/06 22:56:34
とりあえず試してみました。
変わりませんでした。。
やはりあの、、原理を。。

560:nobodyさん
09/07/06 23:10:21
例えばRepeaterやGridViewコントロールなどのように、
動的に行が生成されるコントロールで、
さらに動的にRepeaterやGridViewなどのような動的に行を生成するコントロールを作成し、
その中でClickイベントを実装すると、その問題が発生するということだったはず。

ページによって存在するかどうかわからないイベントの発生元が存在した場合に、
それを検証する術がないのでエラーになるという感じだったような気がする。
例えばRepeaterの中のLiteralコントロールに、サニタイズをせずに文字列を表示させてしまい、
擬似的にポストバックされるコードを記述されてしまうのを検知するのと区別が付かないとかなんとか。

記事のありかは忘れた。

561:nobodyさん
09/07/06 23:23:44
>>560
おお~。なるほど!ありがとうございます
分かりません!

でも自分の頭じゃ理解できないってことだけは分かりました。

まぁMFCなんかでもダイアログボックスを表示中に他のタイマーとかのイベントがくると
ダイアログボックスのなかのメッセージポンプがそれを処理しちゃって、
その辺を考えて作らないといけないとか、そんな苦労を思い出します。
要は凝ったフレームワークにありがちな落とし穴って事ですかね。

うーん。困ったw

562:nobodyさん
09/07/06 23:35:38
>>554
・main.aspx
dim TextName as textbox = CType(ユーザコントロールのID.FindControl("txtName"), TextBox)

これでお前のやりたいことはたぶんできるだろう

これをやるべきじゃないとか何とかいろいろあるんだが、
まあそれは勉強してくれと言うしかない

563:561
09/07/07 00:48:14
いろいろ試行錯誤した結果、TemplateFieldのItemTemplateの中身がLinkButtonだと削除機能は全く問題ないけど、
ImageButtonだとだめみたいです。
ImageButtonにしてEnableViewStateをFALSEにしてもだめみたいです。
なんか、ImageButtonがだめのかねぇ。
もう寝ます。

564:561
09/07/07 21:59:56
海外のサイトあさって回答を見つけたよ。
なんでもGridViewのサーバーサイドのイベントが2回以上起こると発生するらしい。
自分の場合は最初に(書いてなかったけど)RowCreateイベントを使ってる。
そして2回目はボタンをクリックしたときに発生する。
この2回のポストバックにおいて、RowがもってるID(つまりe.Row.ID)が食い違っていると
この検証に引っかかるらしい。
(ただのMSのバグじゃねーの??)
自分の場合、最初はRowCreateで、この時点ではe.Row.IDはNULL、たぶんボタンをクリックしたときはなんか値が入ってるんだろうね。
それが食い違っているからだめ~ってこと。
なんで最初にユニークな値を突っ込んでおけばいいらしい。
つまり
RowCreate()
{
e.Row.ID=Guid.NewGuid().ToString();
}

これでOKだった。でもなぜLinkボタンならよいのかは不明。Linkボタンはポストバックじゃないからかな。

565:nobodyさん
09/07/07 22:06:15
1ページに対してイベントは1回だから別に間違ってないだろ
それこそ、故意にイベントを発生するタグを挿入される危険性を排除するのが目的なんだから

566:nobodyさん
09/07/07 22:10:13
なんだ、兄さんよく知ってる感じだな。
もっと早く出てきて教えてくれよ。

567:nobodyさん
09/07/07 22:27:17
IDが変わるような操作したあと、databindし直すのが正しい操作じゃないのか?


568:nobodyさん
09/07/07 22:58:50
>>567
たぶんあなたの言っていることは正しい。

569:nobodyさん
09/07/07 23:52:10
javascriptどうすれば簡単に覚えられますか?
VBに浸りすぎてぜんぜんわからん

570:nobodyさん
09/07/07 23:57:57 ID58Jon/
.NETではなくASPなのですが、スレがないのでこちらに書き込みます。
DBテーブル上にBASE64エンコードされた画像データ(テキスト)が格納されています。
これをデコードしてresponseで出力したいのですが。。

エンコードはBASP21のBASE64関数を使い、ファイル経由で行いました。
デコードはファイル経由にしたくないので、なんとか直接出力したいのですが。
ちなみにBASP21でデコードすると

Dim o_buf
o_buf = objBASP.BASE64(rsRecord.Fields("Field_name").value, 1)
Response.BinaryWrite o_buf
Response.End

のような感じになりますが、o_bufにバイナリイメージの先頭数byteしか入ってこなかったので、
BASP21は使えないと考えています。
「これぞ王道」のような方法があればお教えください。
いまさらながらASPでプログラムを作成する案件がでてきて、慣れない中苦戦しているもので。。
よろしくお願いします。


571:nobodyさん
09/07/08 00:10:09
>>570
>エンコードはBASP21のBASE64関数を使い、ファイル経由で行いました。
直接デコードしたら表示できる?

>デコードはファイル経由にしたくないので、なんとか直接出力したいのですが。
ファイル経由にしたらデコードできる?

>o_bufにバイナリイメージの先頭数byteしか入ってこなかったので
なんで入ってこないの?

>「これぞ王道」のような方法があればお教えください。
バイナリのままデータベースに保存できないの?


572:nobodyさん
09/07/08 00:19:39
>>569
VBを窓から投げ捨てる

573:nobodyさん
09/07/08 01:35:13 ZNTcUj46
レスありがとうございました。

>>エンコードはBASP21のBASE64関数を使い、ファイル経由で行いました。
>直接デコードしたら表示できる?

>>デコードはファイル経由にしたくないので、なんとか直接出力したいのですが。
>ファイル経由にしたらデコードできる?

 ファイル経由でのデコードはできています。(BASP21利用で)
 このファイルをビューアで見ることもできます。
 サーバ負荷が高くなりそうなので、ファイル経由は避けたいと思っています。

>o_bufにバイナリイメージの先頭数byteしか入ってこなかったので
なんで入ってこないの?

 BASP21の関数利用の結果がそうなっていました。
 ここは理由はよくわかりません。。

>「これぞ王道」のような方法があればお教えください。
バイナリのままデータベースに保存できないの?

 バイナリのまま保存する方法も現在調査中です。
 エンコードする方法と、両方を調べている最中です。

 どうぞよろしくお願いします。


574:nobodyさん
09/07/08 09:09:29
>>573
モード6と7が対なのはわかるんだけど、
それと、その他のモードに互換性があるのかな
他のは、いわゆるwidestringだけに対応してて、バイナリには対応してないんじゃないのかな。
異なるモード間で互換性がないと意味がないから、
ファイルをエンコードするのに、FSOでファイルを読み込んで、
一度変数に入れてから6と7以外のモードで変換してみたらできるのかな?

575:nobodyさん
09/07/08 18:32:48
aspの質問ですらなく、BASP21の話じゃないか、それ
BASP21って専用のスレとかないのか?
それか、サポート付きの有償版みたいなのなかったか?

BASE64ってそんなに難しい規格じゃないから、
自分でデコードする関数書いたらどうだね

576:nobodyさん
09/07/09 00:56:21
このスレ的には、
FCL使えって感じだけどな

577:nobodyさん
09/07/09 17:08:52
Framework Class LibraryってClassicASPにも存在するの?

578:nobodyさん
09/07/09 22:37:40
ページの名前変えたらものすごい変なエラーが出るようになった。。

579:nobodyさん
09/07/09 22:59:29
ASP.NETは一つ一つのページがpertialクラスになってて、
ページ名がクラス名になってるんだけど、
リネームしてもそのクラス名は変更されないから
リネームしたことでページ名が重複しちゃったんじゃね?

580:nobodyさん
09/07/09 23:02:18
>>579
まぁ変え方がまずかったんだと思う。いま一生懸命直してます。

581:nobodyさん
09/07/09 23:11:57
1日1回はローカルでもいいから、別のトコにバックアップとったほうがいいよ
データベースがらみとか、アドオンの帳票がらみでわけわからん具合になること結構あるから

582:nobodyさん
09/07/11 14:43:11
よくも悪くもバッドノウハウの固まり

583:nobodyさん
09/07/13 00:21:32
画面上に100個位コントロール(TextBox)が並んでて、Postされた時に一々値を拾うのが
めんどくさいんですが。なんか上手い方法無いですかね?
特に、Repeaterで自動生成されたTextBoxとか、IDもサーバで勝手に振られるのでどうして
いいのか分かりません。

やりたいこと:Postされた値をなんか上手い方法でDataSetに入れてしまいたい。
DataBindって参照しか出来ないEvalじゃなくて、双方向更新も可能なメッソドもあるとか?

584:nobodyさん
09/07/13 01:18:02
>>583
具体的には忘れたけど、こんな感じ

■Repeaterの場合
for (int i = 0; i < this.Repeater1.Items.Count; i++)
{
 RepeaterItem ri1 = this.Repeater1.Items[i];
 TextBox textBox = (TextBox)ri1.FindControl("textBox");
}

■ページにポトペタした場合
Control control = this.Page.FindControl("controlName");
でID名でコントロールが取得できるので、連番で名付けてループさせて取得すればいい

DataSetに格納したい行をClassか、structで宣言して、
ループする度にインスタンスを生成し、IList<T>に格納していけばいい。
別途IList<T>からデータを取得してDataSetに格納するクラスを別途作成す。。



585:nobodyさん
09/07/13 02:12:46
>>583
>DataBindって参照しか出来ないEvalじゃなくて、双方向更新も可能なメッソドもあるとか?
使い勝手があれだから、きっと絶対必ず役に立たんがBindというのはある。
例えばObjectDataSourceのConflictDetectionを設定してやれば、
UPDATEやDELETEで指定したメソッドに対して、
変更後の値と変更前の値を自動で放り投げてくれる。

586:nobodyさん
09/07/13 16:29:19
VS2005 + IIS6.0 + IE6.0 or 7.0で開発しております。
DataGrid(GridViewではありません)のヘッダー固定に関しての質問です。

DataGridのヘッダー行を固定しようと思い、ネット上でサンプルを参考にして
浮いているように見えるのですが、とりあえずヘッダー行の固定を実装しました。
参考URL:URLリンク(jsajax.com)

ですが、この固定しているヘッダー行が常に最前列に出ているようで
画面上のメニューバーから展開されるサブメニュー項目が、ヘッダーの後ろに表示されてしまいます。
メニューバーはJQueryで作成しています。
参考URL:URLリンク(css-tricks.com)

JQueryで作成している箇所は、DBから動的に項目を取得して
メニュー自体をHTMLで作成しているので、JQueryをはずすことはできません。

ヘッダー行かメニュー項目のZ-INDEXで解決するかと思ったのですが、
どうも効いてないようで解決方法の糸口が見つかりません。
どなたか詳しい方いらっしゃいませんでしょうか?




587:nobodyさん
09/07/13 16:53:47
jquery.dropdownPlain.jsでz-index記述してみたら

588:nobodyさん
09/07/13 18:05:58
>>587
やってみましたが結果は変わらずでした

固定しているヘッダー行が浮いたような状態になり、
DataGridよりも若干右にズレているのも気になります。
これが問題なんでしょうか・・




589:nobodyさん
09/07/13 18:25:38
メニューを表示させなければうまくいくのか?
あと改行してメニューが干渉しない位置にヘッダーを表示させて場合はうまくいくのか?

うまくいくのならメニューを表示させたことで、メニューのスタイルシートが、
ヘッダのスタイルシートに悪影響を及ぼしてるんだろうから、
メニューの何が悪さをしてるのか、一つ一つスタイルを削って試して見るしかない

590:nobodyさん
09/07/14 21:55:30 s5DuVBkc
VS2008、C#でASP.netという構成ですが・・・すいません、ビルドの後、プリコンパイルされたDLLというのは何処に格納されるのでしょうか?
ASP.net 2.0の、しかもCodeBehind属性を使っているレガシーなアプリをメンテナンスしているのですが、CodeBehindに指定されている.csの内容を修正してもそれが反映されません。
(aspxの内容を修正した場合は反映されています)

ビルドしてプリコンパイルすればいいかと思ったのですが、ビルドしても\binに格納されているDLLが更新されないのです。
おそらくどこかに設定があると思うのですが、見つけることが出来ませんでした。
よろしければアドバイスをお願いします。

ちなみに、Webサイトのプロパティの「MSBuildオプション」→「出力フォルダ」は、修正してみましたが特に変化はありませんでした。

591:nobodyさん
09/07/14 22:00:55
プロジェクトフォルダ-releaseフォルダの中かな
もしくはdebugフォルダ

592:590
09/07/14 22:44:54
>>591
早速のお返事、ありがとうございます。
が・・・ありませんねぇ、どちらも。
もしかしてプリコンパイルは関係ないのかな? でも、今参照しているbinの中のdll、参照外すと動かなくなるしなぁ・・・。

593:nobodyさん
09/07/15 01:38:50
VS2008のASP.NET2.0ということは、Webアプリでなく、Webサイトだと思うけど、
参照設定で、他のDLLを参照する設定になってない?
普通、通常に使用しているだけなら、Webサイトで作成していてbin以下にdllが
作られることはないと思う。
だからビルドしても、外部参照のdllは更新されるはずがないような気がする。

webアプリだったら、あまり詳しくしらないのでよくわからん。

594:nobodyさん
09/07/15 05:36:31
CodeBehindならWEBアプリな予感
だったらビルドしたらbinディレクトリにあるはずだが

WEBサイトならビルドしてもDLLは(見えるところには)作成されない
プリコンパイルってVSからできたっけ?


というか、参照してるDLLってなんのこと言ってるんだ?
そのプロジェクト以外のDLLをBinに入れて参照してるなら、
そんなもんはそのプロジェクトいくらビルドしても変わるわけないぞ

595:nobodyさん
09/07/15 05:56:10
>>594
IDEからプリコンパイルできると書いてあるね
URLリンク(msdn.microsoft.com)

Webサイトでもコードビハインドだし、
「プリ」ってわざわざ付けるということは、webサイトなんじゃないかと思うんだけど。

596:nobodyさん
09/07/15 11:45:02
エスパー解答

実はプリコンパイルは関係なくて、
>CodeBehindに指定されている.csの内容を修正してもそれが反映されません。
>(aspxの内容を修正した場合は反映されています)
のあたりを詳しく聞く必要があるとみた!

.csの内容を修正しても反映されないって、例えば画面の初期化処理だとか、
ポストバック時の処理を変えたりしてみても以前のロジックが走る、
ってことかな?

.csを削除してみるだとか、新しいページ追加して確認してみるとかはどうでしょう?

プリコンパイルとかWebサイトとかの話はよく分からないので、分かる方お願いします。

597:590
09/07/15 11:55:15
>>593-595

失礼、「Webサイト」でしたね。が・・・。

>WEBサイトならビルドしてもDLLは(見えるところには)作成されない
あれ? もらってきたソース一式に、\binディレクトリがありますけど・・・?

えっと、binにアプリケーション名.dllを放り込むと、VSの方で勝手にそのdllへの参照設定をします。
その参照設定を外すとdllが削除され、「型 '(アプリケーション名).Global'が読み込めませんでした」ってコンパイルすら通らなくなります。
(当然、「デバッグ」→「デバッグ開始」でも動きません)
それで、「ああ、ビルドしてdllを作り直せば、.csへの修正が反映されるのね」と思ったのですが、
「ビルド」→「Webサイトのビルド」ではDLLが作られない/更新されない・・・おや? というところで詰まっているのです。
うーん・・・別に、開発してるときはプリコンパイルなんてしてくれないくていいのになぁ。

598:590
09/07/15 11:57:39
>>596
おっと、すれ違い失礼。ええ、問題になっているところはソコですね。
ただ、>>597のような考えで「プリコンパイルされたDLLが更新されないのが問題だよね?」と思ったのですよ。
ちょっとやってみましょう>新しいページを追加

599:590
09/07/15 12:23:54
>>598
ダメですね。「型'アプリケーション名.hogehoge'を読み込めません」となります。
.csを無視してDLLを見に行ってるような感じです。

600:590
09/07/15 19:32:14
お騒がせしました。
結局、.net 2.0を明示的に指定して最初からソリューションを作り直し、そこにソースをコピーして再ビルドをかけました。
何が悪かったんだろう・・・。
※ツリー部にドラッグ&ドロップでコピー可能、しかも関連ファイルまで根こそぎ持っていくのにはちょっと感心しました>VS2008

とりあえず.csの修正は反映されるようになりましたが、やはりリビルドはしないとダメですね。

601:nobodyさん
09/07/15 19:37:54
>>600
ソースファイルのタイムスタンプがおかしくなってるとか、マシンの時刻がおかしくなっているとか
プロジェクトの何かのファイルのタイムスタンプがおかしくなっているとか…。


602:nobodyさん
09/07/15 19:55:28

たぶん、webアプリケーションと間違えてないか?

それか一つのソリューションに、webサイトプロジェクトと、他のプロジェクトがあって、
webサイトプロジェクトから、他のプロジェクトへの参照設定がされてる。
dllは、他のプロジェクトで作成したクラスのdllだからASP.NETの.csを変更してビルドしても
何の変化もないので不思議がってる。

こんなところだろ

603:nobodyさん
09/07/16 01:59:14
現在Visual Studio 2008(VB.net)を使用しMasterPageの中に
<div></div>ブロックで囲んだGridViewを配置し、
ヘッダー行を固定しようと、.Freezingのお決まりのCSSを書き
GrdiViewHeaderのCSSにそのFeeezingのCSSを指定したところ、

ヘッダー行は正常に固定する事が出来たのですが、
<div>ブロックで正常に width:450pxと指定しているにも関わらずGridViewのヘッダー行(だけ)が
その<div>ブロックの幅を右横に突き抜けて表示されてしまいます。
一体何が原因なのでしょうか?
※IE7

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
指名 |  年齢 | 趣味 | 経験年数 | 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 A     15   || ↑ヘッダー部分だけが突き抜けてしまう。(ここで趣味・経験年数)
 B     15   ||
 C     15   ||
~~~~~~~~~
~~~~~~~~~|


604:nobodyさん
09/07/16 03:01:51
スタイルシートはdivで指定しても、その内側のタグのスタイルの指定で
表現してくれないことがあるから、そのヘッダー行に直接スタイルを適用してみたら?

というか、そういう時は、生成されたhtmlのソースをローカルなどにコピペしてブラウザで表示させるなどして、
関係ないhtmlタグを次々と消していって、目的とするタグだけで確認したほうがいいよ。
まったく関係無いと思われるスタイルが影響している場合があるから。

その目的とする表示を構成しているタグだけを残して他のタグをすべて消去し、
それでも問題が発生するかどうか確認するなどして、
他の要素が影響を及ぼしてる可能性をなるべく排除すべき。


605:nobodyさん
09/07/16 03:18:17
>>604
ありがとうございます。
今日会社で試してみます。

606:nobodyさん
09/07/16 09:29:33
>>600
レガシーなって、もともとはどのバージョンで作ってあったんだ?
それはWEBアプリで作ってあったのか、WEBサイトでつくってあったのか?

>>602
俺がエスパーするに、元がWEBアプリだったのを、今はWEBサイトで修正しようとしてる
今修正した部分はWEBサイトなんで、アプリケーション.DLLに反映されない
既存部分はWEBアプリなんで、アプリケーション.DLLへの参照がないと動かない

ソース全部コピーしたってことは、今全部WEBサイトになったんで動いてる

ま、こんなとこだろう


607:590
09/07/16 16:43:13
>>606
そうですね。*.slnファイルも貰ったのでそのまま開いたのですが、こちらで空のwebサイト、webアプリを作成して比較してみると、webサイトの*.slnのようです。
これで開発してる、って言ってたんだけどなぁ・・・。

608:nobodyさん
09/07/16 19:05:01
>>606
その可能性が高そうだね
つかwebアプリをwebサイトに移植しても、そのままで動作するんだな

609:nobodyさん
09/07/16 22:19:36
VS2005は知らんが、VS2008でWebサイトを作成してビルドすると
勝手にbinフォルダが作成されてる。その中にaspxに付随する.csやAPP_CODE配下のクラスファイルが
コンパイルされたdllが放り込まれる。aspxのヘッダはこのbinフォルダのdllを見に行くように全て書き換えられる。

別にビルドしなくても、.csのソース付きaspxをWebサーバに配置しても
IISとASP.NETは普通に解釈してくれる(まぁビルドするのと同じことしてるんだろけど)
正式リリース時は速度&セキュリティを考えてビルド方式にしたほうがいいよな。。

610:nobodyさん
09/07/16 22:25:32
VS2008のWebサイトで、ビルドしても、リビルドしても、binフォルダもできないし、dllもできないぞ?

611:nobodyさん
09/07/16 23:25:29
>>609
お前の言うWebサイトとは、VSでのプロジェクトの種類としてのWebサイトか?
一般的な意味でのWebサイトか?

一般的な意味でのWebサイトやWebアプリって言葉と
VSでプロジェクトの種類としてのWebサイトとWebアプリってのは別の話だぞ

binフォルダにDLL作るのはWebアプリだ。ソース修正したらビルドしないとDLLに反映されない
WebサイトではDLLは通常見えるところには作られてない。ソース修正したら自動的にコンパイルされ反映される
これを任意のタイミングで指定したところにDLL作らせるのがプリコンパイル

実際のところはWebアプリかWebサイトかは、VSが.ASPXのページディレクティブをどうするかだけで
ASP.NETは各ページの指定通りに動く。なので混在してても動く


612:nobodyさん
09/07/16 23:35:34
>>610
悪かった。ビルド→Webサイトの発行でやってみてくれ

>>611
VSのプロジェクトのWebサイトですよ

613:nobodyさん
09/07/17 00:38:13
それは発行するとプリコンパイルされるだけの話

614:nobodyさん
09/07/17 00:40:18
それぞれのメリット

・Web サイトの発行ユーティリティを使用する利点
プリコンパイル プロセスにより、コンパイル時エラー、および Web.config ファイルと他の非コード ファイル内の潜在的なエラーを検出できます。
ソース コードは、.aspx ファイル内のマークアップを含め、Web サイトから削除されます。
これにより、知的財産を保護でき、第三者がサイトのソース コードにアクセスしにくい状況を作ることができます。
サイト内のページが既にコンパイルされているため、最初の要求時にページを動的にコンパイルする必要がありません。
これにより、ページの初期応答時間を短縮できます。ただし、ページが動的にコンパイルされる場合でも、以降の要求についてはその出力はキャッシュされます。

・Web サイトの発行ユーティリティを使用する欠点
指定する発行オプションによっては、サイトを変更する際、再コンパイルが必要になる場合があります。
したがって、サイトの開発中、頻繁に変更を加えるような場合にWeb サイトの発行ユーティリティを使用することは実用的ではありません。
Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。
ローカル コンピュータまたはローカル エリア ネットワーク上の別のコンピュータにのみコピーできます。

615:nobodyさん
09/07/17 01:10:21
>>614
それはMSのコメントなのか?

>Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。
発行ユーティリティでFTP経由を指定できるんだが、これはリモートサーバとはいわないのか

616:nobodyさん
09/07/17 01:15:08
すまんVWDの話な

617:nobodyさん
09/07/17 01:30:49
説明がめんどいからURLだけ
URLリンク(msdn.microsoft.com)

VWDじゃなくても、発行ユーティリティを使用した欠点に、
>Web サイトの発行ユーティリティでは、コンパイル済みサイトをリモート サーバーに配置することはできません。
>ローカル コンピュータまたはローカル エリア ネットワーク上の別のコンピュータにのみコピーできます。
の記述はあるな

FTPの利用は、Webサイトのコピーツールのほうらしいなぁ

618:nobodyさん
09/07/19 17:06:01
「検索」ボタンを押されたときにSQLを実行して実行結果をGridViewに描画させたいです。
SQLは、ユーザが指定した検索条件でいろいろ動的に変えたいので
SqlDataSourceのSelectCommandでは対処できないのかな?と思ってます。

そこで、「検索」ボタン押下されたときにポストバック処理の流れで
GridViewのDataSouceにArrayとかそんなようなオブジェクトを渡して描画させたいです。
そんなようなやり方でいいんですかね?

619:nobodyさん
09/07/19 19:03:15
>>618
基本的にはそれでいいが、SQL Injectionには気をつけろ

620:nobodyさん
09/07/19 19:04:33
ありがとん

621:nobodyさん
09/07/19 19:30:24
単に検索条件変えるだけでSQL文の構造が変わる訳じゃないのなあら
SqlCommand の Parameter 使うとか。

622:nobodyさん
09/07/19 23:37:25
面倒かもしれないけど、自前のクエリ実装と、Repeaterの組み合わせのほうがいいと思うんだけどなぁ

623:nobodyさん
09/07/20 01:35:00
>>622
そんなんわかるほどスキルないもん。
ヒントだけでもいいから教えてください。

624:nobodyさん
09/07/20 16:03:44
>>623
プロジェクトのデータセットを追加して、GridViewにBindするだけ
何かを選択させて条件で表示させたいなら、DataTable.Select("Query")を利用すればいい

625:nobodyさん
09/07/20 16:45:16
>>624
ありがとうございます。
キーワードが増えたのでそれで勉強してみます

626:nobodyさん
09/07/20 23:36:16
>>624
SqlDataSourceなりObjectDataSourceなり
データソースを使わせた方がいいと思うが…。
ページングができませんだの、編集ボタンでエラーが出ますだの言われかねんぞ。

627:nobodyさん
09/07/21 13:52:20
ASP.NETのプロジェクトを作成して、そのなかでSQL ServerのDBに対して「ADO.NET Entities Data Model」
LINQでアクセスしています。

このDBを定期的に掃除するコードを実行したいので、タスクスケジューラから実行できる、
コンソールアプリのプロジェクトを作成しました。このプロジェクトから、↑のASP.NETのプロジェクトを
プロジェクト参照した場合、

new XXXXDatabaseEntities()

のところで、TypeInitializationExceptionが発生します。

ASP.NET側のプロジェクトのWeb.Configにあった接続文字列をこのコンソールアプリのプロジェクトの
App.Configにコピペしてきたのですが、それでは不十分なのでしょうか?

628:nobodyさん
09/07/21 17:13:29
>>627
いま気づいたが、ひょっとしてDLL側にconfigを用意してそこに接続文字列を書かないといけないのか・・。

629:627
09/07/21 18:40:41
解決しました。

・DllのConfigは書いても無駄
・App.Configの内容がXXX.exe.configにビルド時にコピーされる

この2つを理解していなかったのが原因でした。

630:nobodyさん
09/07/21 19:36:42
>このDBを定期的に掃除するコードを実行したいので、タスクスケジューラから実行できる、
>コンソールアプリのプロジェクトを作成しました。
ストアドプロシージャで作成してSQLのjobから実行したほうがいいんでないの?

631:627
09/07/21 20:01:58
>>630
ストアドプロシージャは書くのが面倒&書き慣れていないので、LINQで書きたいのです。

また、ログをDBに出力するメソッドなどは既に用意してあるので、
出来ればそのメソッドを用いて、DBの掃除をしたときにログを出力したいのです。

ところで、SQLのjobなら定期的に実行する仕組みがIISかSQL Serverかに搭載されているのですか?

632:nobodyさん
09/07/21 20:30:30
うろ覚えですまん
MSSQLには定期実行するjobの機能がある。ただしExpress以上。
jobがなくても、SQLCMDだったかなで、別途ファイルに保存したクエリを実行できるから、
これをOSのタスクスケジューラーで実行するという方法もあったはず

ストアドプロシージャでも、SQL/CLRを使えば、.NETが使えるから、
Linq To Entitiesも、ログを残すこともできるんでないかな。
.NET3.5でSQL/CLR使ったことないからよくわからん。

633:627
09/07/21 20:44:49
>>632
ああ、SQL Serverにジョブを定期実行する仕組みがあるのですね…。
これは知りませんでした。勉強になりました。


634:nobodyさん
09/07/23 06:02:37
>>631
自分はストアド派だなぁ

その「DBの掃除」がストアド化されていて
後で「ログを出力」という要件が追加になった場合、
ストアドの中だけ弄れば済む。

「後で要件追加(変更)」なんて設計者としては最初から織り込まないといけないと思う。
→ストアド内でログ出力するロジックを追加した方が総工数は下がる

635:627
09/07/23 13:07:42
>>634
> →ストアド内でログ出力するロジックを追加した方が総工数は下がる

それはストアドを駆使して書いてある場合の話であって、ASP.NETでの開発の場合、
ストアド使わずにLINQで殴り書きするほうがインテリセンスも使えて生産性が高いように思うのだが。

636:nobodyさん
09/07/23 14:04:17
つSQL CLR


637:627
09/07/23 14:25:10
>>636
SQL CLRは技術的に見ても面白いテクノロジーですが、
LINQに比べると書きやすさがずいぶん劣るように思います。

638:nobodyさん
09/07/23 15:01:03
コーディングのし易さ、早さ、書きやすさを最大限に追求することで、
プロジェクト全体の保守を含めた生産性の高さが最大になる案件やシステムなら、
そうすればいいじゃんとしか言えない。

639:627
09/07/23 15:36:04
>>638
ああ、ええ、まあ、そうですよね・・。

もう少し生産的な話として・・

LINQで書いたものはCLRに変換されてserver sideで実行されるのですから、
ストアドプロシージャがLINQで書ければ便利な気がするのですが、どうでしょう?

640:nobodyさん
09/07/23 15:42:28
データベーステクノロジの使い分けとかみたいなのが
赤間さんとかの対談の形で
MSDN のページに載ってたんだけど
今探したら見あたらないな

641:627
09/07/23 15:49:30
>>640
これのことですかね?
URLリンク(msdn.microsoft.com)


642:nobodyさん
09/07/23 16:03:33
そうそう、それそれ。

643:nobodyさん
09/07/23 16:11:21
分業が必要な規模のアプリの場合、
その複数のプログラマがみんな美しいSQL文を書けるわけじゃないし
マニュアル等々で均一化するのも大変

1人のデータベーススペシャリストに
美しいSQL文でストアド作らせてた方が効率いいだろ、と感じる

あと、ASPの場合、外部からのハックキングを想定せねばならず
データベースへのアクセス権限としてテーブルへの直アクセスを許したくない

644:nobodyさん
09/07/23 16:15:12
仕様変更でDBのフィールドが一つ増えるたびに、
関係するクライアントアプリやASP.NETに記述したlinqをすべて書き直すなら、それでもいいんじゃね?

単一クエリなら問題ないが、1行の操作が他のテーブルに影響を与えるなら、
ストアドプロシージャやビューをフルに活用したほうが、
処理をDB内にカプセル化できるから、仕様が変更されても、
アプリケーションを変更する必要がないし他でも簡単に使いまわすことができる。

その典型例がDBを掃除するコード。
引数が必要ないからアプリ側に影響を与えないし、
ループして複数の行に対して処理するだろうからストアドのほうが高速だし、
トランザクションも明示的に処理ができる。

645:nobodyさん
09/07/23 16:16:25
一つのページで大量のクエリかけなきゃいけないときってどうしてるの?
select * from a;
select * from b;
...

って感じでやって取り込むのがいいの?

646:627
09/07/23 16:25:09
>>643-644
> 仕様変更でDBのフィールドが一つ増えるたびに、
> 関係するクライアントアプリやASP.NETに記述したlinqをすべて書き直すなら、それでもいいんじゃね?

これについてですが、私の場合、DBにアクセスするコードは、サブのプロジェクトを作ってそこに集約させてあるので、
DBのフィールド1つごとに修正する箇所があちらこちらに発生するということはないです。

ただ、ストアドで処理をDB内にカプセル化するという発想やDBのスペシャリストにストアドを書かせるという発想は
私にはなかったので643,644は本当に参考になりました。ありがとうございます。

647:nobodyさん
09/07/23 16:31:51
>>645
取得したいデータによって、動的に取得したいテーブルが変化するとかへんな設計してなければ、
二つのテーブルから合計値を取得するとか、簡単なものなら
クラスにクエリをたくさん記述して、各ページで再利用してる場合もある

ただ、複雑な計算が必要だったり、テーブル数が多くなる場合には、
MSSQL側に、その計算式をまるごとビューとして登録するか、
テーブル値関数として登録してる。

プログラム側では、一つの表として取得できるのでそれを描画するだけ。

648:nobodyさん
09/07/23 16:36:22 FURNmJTN
VS2005(VB)で開発しています
ドロップダウンリストを使用してデータを格納しているのですが
画面上からドロップダウンリストを操作した時に、表示される項目の向きが
常に下方向のみ表示できる方法はないでしょうか?
________
[_______]▼
項目A
項目B
項目C

このように表示したいのですが・・・。
現状だと▼ボタンを押して表示されるデータが、リストボックスの中央から
表示されているような状況です

宜しくお願い致します

649:nobodyさん
09/07/23 16:36:55
>>646
それだと、仮にクライアントアプリだと、修正されるたびに、すべてのPCにデプロイする必要があるから面倒

DBの掃除コードはコンソールアプリからだけの実行かもしれないが、
仮にコンソールアプリからでもASP.NETからでも利用したい機能が発生した場合、
一つのプロジェクト内のクラスが変更になれば、両方をデプロイなり発行しなくちゃいけない。

DBに登録すれば、それに関するストアドの修正だけで済むので、
クライアントもASP.NETもコードを変更する必要がないので。

650:627
09/07/23 17:04:52
>>649
ああ、なるほど。クライアントアプリのときはそうでしょうね。

651:nobodyさん
09/07/23 17:10:18
あんまりストアドに頼ると、DBMSを変更しづらくなるのがやだなあ。
よほどの理由がない限り、DBMSへの機能依存を前提とした設計は
避けたほうが無難じゃね?

652:nobodyさん
09/07/23 17:18:22
>>650
コンソールとASPでやってて、SQLを別プロジェクトにしてる時点で、
同じDLLをASPとコンソールの二つからみてるわけだから同じじゃん
異なるバージョンのDLLで稼働してるのが気持ち悪くない人なら別にいいけど。

>>651
DBそのものの変更の可能性を考えるのなら、
使用言語が変更しづらくなる可能性も考慮しなきゃw
ストアドなら、そこにアクセスして操作できる言語なら
言語に依存せずに利用することができるとも言えるw

653:627
09/07/23 17:25:10
>>652
> 同じDLLをASPとコンソールの二つからみてるわけだから同じじゃん

サーバーサイドだけならdeployする手間が、普通のクライアントアプリとは違うので
>>649の「それだと、仮にクライアントアプリだと、修正されるたびに、すべてのPCにデプロイする必要があるから面倒」
という問題は無いかな、と思いました。

> 異なるバージョンのDLLで稼働してるのが気持ち悪くない人なら別にいいけど。

この部分がいまひとつ理解できていないのですが、私の構成は次のようになっています。

コンソールプロジェクト = DBの掃除を行なうコードを書いたプロジェクト(A) + DBへアクセスするためのサブプロジェクト(B)
ASP.NETのプロジェクト = 普通のASP.NETのプロジェクト(C) + DBへアクセスするためのサブプロジェクト(D)

上の B = D で、これはどちらも同じバージョンのDLLなのですが・・。

654:nobodyさん
09/07/23 17:34:37
>>653
別に、あなたのやり方を否定してるわけでも、自分のやり方を推奨してるわけじゃなくて、
相反する考え方があるという事なんで、あくまで一般論の話ね。

どんな想定かわからないけど、複数のものを変更しなくちゃいけない場合、
その時点で変更し忘れ等のミスが発生する可能性が高まるということ。
例えばwebサーバが複数あるとか。

>上の B = D で、これはどちらも同じバージョンのDLLなのですが・・。
ASP.NETのプロジェクトの開発で何か変更になったとき、
サブプロジェクトDのDLLを変更するのはいいけど、
その時点でBに反映させなければ、異なるバージョンの物でそれぞれが動作している
という気持ち悪い状況になるでしょ。

そういうやり方をしてるなら、Dが変更されたら、変更されたDLLをBとして反映する
必要があるから、結果的に複数のものを変更する必要があるんじゃないの?という話。
BとDが異なるバージョンのDLLで動作しているのが気持ち悪くない人というのは
そういう意味。

655:627
09/07/23 18:10:04
>>654
ああ、なるほど。意味がわかりました。

> その時点でBに反映させなければ、異なるバージョンの物でそれぞれが動作している
> という気持ち悪い状況になるでしょ。

確かにそれはそうですね。

私はdeployの作業自体はスクリプトを書いて自動化してあるのですが、そこに書き忘れたら、
というのはありますね。

656:nobodyさん
09/07/23 18:33:32
というか、Linq To SQLは終了の方向だから、
EntityFrameworkのほうで頑張るしかないな

657:nobodyさん
09/07/23 21:15:25
>652
DBMSは導入先の環境・都合で変わりうるでしょ。開発言語に関してはそれはまず有り得ない。
大体、「開発言語を変更しろ」なんてのは事実上「1から作り直せ」と同義なんだから、
ストアド部分だけ流用できたって、たいして嬉しくないよ。

658:nobodyさん
09/07/23 21:33:24
DBMSが具体的に何を差してるかわからんが、
データベースのソフト(MySQLたのOracleだのMSSQLだの)を差してるなら、
導入先の環境、都合でこれらがそんな頻繁に変わるか?

データだって移行せにゃいかんし、
そもそもクエリだってデータベース間で関数名や、その引数なんかに違いがあるんだから、
言語が統一ならどんなDBであってもまったく変わらないなんて完全な錯誤だと思うんだけど。
あるシステムでデータベースを異なる製品に変更しろなんて要求があったら、
1から作り直すのと同じだと思うし、あまりの仕打ちにそれ以上に腹が立つわw

659:nobodyさん
09/07/23 22:08:49
いつだってフルスクラッチ大好きな俺は大歓迎だ!
ただし、金と時間はくれよな!

660:nobodyさん
09/07/24 12:02:04
ASP.NETで開発しています。
JavaScriptで使っているデータを1日1回、DBから生成して .js ファイルとして書き出しておくことを考えています。

その .js ファイルを IIS7でホスティングすることになるのですが、
「DBから生成して .js ファイルとして書き出しておく」ときに、テンポラリに書き出して、
.NET FrameworkのFile.Copy(src , dst, overwrite = true)で前のファイルに上書きしようと考えています。

ところが、このファイルの書き出し中にこのファイルをクライアントブラウザから要求されて
IIS7が読み込もうとしたとき、コピー中の中途半端なファイルがクライアントブラウザに渡されます。

この挙動は望むものではなくて、出来れば、コピー前の古いファイルか、コピー後の新しいファイルかの
どちらかをクライアントブラウザに渡して欲しいのです。

これはIIS7の設定で解決するのでしょうか?それとも、File.Copyを使うのが良くないのでしょうか?

661:nobodyさん
09/07/24 15:08:26
rename してからコピーして rename
コピー中はファイル存在せず

662:nobodyさん
09/07/24 15:10:12
いや、少し違うか

hoge.new で予め作っておく
hoge.js → hoge.bak にリネーム
hoge.new → hoge.js にリネーム
hoge.bak を削除

663:nobodyさん
09/07/24 17:35:30
>>660
javascriptって.jsしか無理なんだっけ?
自分なら.jsファイル(もしくは変更されるデータ)をデータベースから取得し、
アクセスがあるたびに動的に生成するな

ファイルを作成するプログラムが、バッチ処理の役割も果たしていて、
日に1回の集計処理を行ってるとすると、若干厄介かもしれないけど

664:660
09/07/24 18:02:37
>>661-662
それだと hoge.js → hoge.bakにrename中にアクセスされるとnot foundになるのが
嫌なのです。その2つのrenameは実際にはほぼatomicに行なわれるとは思うのですが。

>>663
確かにデータベースから流しても良いのですが、そのオーバーヘッドが嫌なのです。


(自己解決)
NTFSは次のようにtransactionをサポートしているらしいので
面倒ですが、これを使うことにします..。

Enhance Your Apps With File System Transactions
URLリンク(msdn.microsoft.com)


665:nobodyさん
09/07/24 18:24:53
おーNTFSでファイルのトランザクションができるのかw
同じ.jsだとIEでキャッシュ扱いされそうな気がするんだが、その辺はどうなんだろ
レポート頼む

666:660
09/07/24 19:23:06
>>665
> 同じ.jsだとIEでキャッシュ扱いされそうな気がするんだが、その辺はどうなんだろ

それはIISのファイルのexpireの設定次第だと思います。

667:nobodyさん
09/07/24 19:40:49
へーその都度、生成されるaspxでも?

668:660
09/07/24 20:25:23
>>667
URLリンク(forums.techarena.in)

にサンプルがありますがファイルの拡張子ごとにexpireする時間を設定できるようです。
このうちjsのexpireを1hourぐらいに設定しておけば、>>665 の問題は解決するのではないかと。

669:nobodyさん
09/07/24 22:19:14 1HXeI2xc
生成し終わったファイルをコピーして別のファイル上書きするだけなら
そんな問題おきなさそうだけどなぁ。
ファイルシステム書き換えるだけでしょ。
Windows の Copy コマンドとか使えないのかな。

670:660
09/07/24 23:37:28
>>669
> 生成し終わったファイルをコピーして別のファイル上書きするだけなら
> そんな問題おきなさそうだけどなぁ。

起きます。System.IO.File.Copyでコピーした場合、ファイルコピーが開始されると
同時に、クライアントブラウザへの古いほうのファイルの転送が中断され、
結果として中途半端なファイルがクライアントブラウザに渡されます。

WindowsのCopyコマンドというのが何を指しているのかわかりませんが、
DOSプロンプトのcopyコマンドのことでしたら、これと同じ挙動のようです。

671:nobodyさん
09/07/25 01:29:42 WtyVOn10
>自分なら.jsファイル(もしくは変更されるデータ)をデータベースから取得し、
>アクセスがあるたびに動的に生成するな

うわ、死んだ方がいいなこいつw

672:nobodyさん
09/07/25 02:03:30
>>671
なんで?
それが駄目ならデータベースからデータを取得して、
動的に中身を生成するasp.netの全否定になると思うけど?

673:nobodyさん
09/07/25 02:15:27
ASP.NETの動作にDB接続が必須だったとは初耳だ

674:nobodyさん
09/07/25 02:19:13
ストアドってよく使われるもんなの?
個人的には全部ソースで作ればいいじゃんと思うんだけども。

675:nobodyさん
09/07/25 02:27:23
>>673
データベースからデータを取得してhtmlを生成する仕組みで動作してる
aspx全般のことを言ってるのに、asp=db必須なんて言うのは論理のすり替え

676:nobodyさん
09/07/25 03:11:46
>>674
ストアドに限らず、viewやテーブル値関数、トリガーを含めてなら便利だし、結構使う
問題なく動作してるなら、別にソースからでもいいんじゃない?

メリットはデータベースを一つのオブジェクトとみた場合、データの操作はデータに近いところで行うという、
可能な操作や状態のみ閲覧でき、実装を隠蔽できるOOPのメリットと併せて考えればわかりやすいと思うけど
あとは複数クエリの実行なら、ストアドのほうが処理が速いということかな
ASP.NETとはいえ、DBとWEBサーバは別だろうから、DB-WEB間のネットワークトラフィックを最低現にできるメリットもある

677:nobodyさん
09/07/25 03:12:12
>>675
んじゃーお前は何でもかんでもDBに突っ込んで毎回取りに逝けばいいよ。

678:nobodyさん
09/07/25 08:21:37 BV/bwvMa
俺頭悪いから
>>675 からなんで >>677 な意見が出るのか理解できない…。

>>673 はまぁ極端ではあるけど
>>672 の文章自体誤解を受けかねない部分はあるからまぁ仕方ないのかなって気はするけど。
まぁでもなんかとにかくかみつきたくてかみついてるような印象はあるか。

679:nobodyさん
09/07/25 11:37:23
>>671はjs「ファイルを動的に生成」ってところに
突っ込みたかったんだと思ったが…

680:nobodyさん
09/07/27 09:33:53
>>664
どこまで極めないといけないのか知らんが
js ファイルを作成する都度、別ファイル名にして、
aspx 側で食わせる js ファイル名を動的に変更させたらどう?

681:sage
09/07/27 10:06:33
TextBoxにもLabelにもなるユーザコントロールって作れないんスかね?
ReadOnlyのプロパーティをtrueにすればLabel、falseにすればTextBox、みたいな。

TextBoxを変更不可にするんじゃどうしても見た目的に駄目なケースがあるんで。

682:nobodyさん
09/07/27 10:34:22 lA2VJ4lQ
動的にコントロール追加すればいいんじゃないの

683:nobodyさん
09/07/27 14:43:15
Repeaterでテキストボックスを動的に生成しています。
ボタンが押されたら内容をチェックして、何らかのエラーがあればエラーのあったテキスト
ボックスの背景色を変えたいんですが、方法が分かりません。

テキストボックスは動的に生成しているので、 プロパティで変更することも出来ないみたいで。


684:nobodyさん
09/07/27 15:31:56
>>681
作れなくはないが、見た目だけならCSSで無理か?

>>683
FindControl

685:nobodyさん
09/07/27 15:33:45
>>681
TextBoxとLabelを配置したUserControl作って、ReadOnlyプロパティとTextプロパティを作って、
TextBox.Visible = !ReadOnly Labe.Visible = ReadOnlyすればいいじゃない

>>683
public List<TextBox> TextBoxList = new List<TextBox>();
protected void Page_Load(object sender, EventArgs e)
{
 for (int i = 0; i < this.Repeater1.Items.Count; i++)
 {
  RepeaterItem ri1 = this.Repeater1.Items[i];
  TextBox textBox = (TextBox)ri1.FindControl("TextBox1");
  TextBoxList.Add(textBox);
 }
}
あとはお好きにどぞ

686:nobodyさん
09/07/27 15:59:05
>>685
683は、validationをclient-sideで行なって、かつ、TextBoxとLabelとの切り替えもclient-sideで
行ないたいということなんじゃない?

まあJavaScriptで書くしかないわな・・。

ASP.NET、client-sideで処理するためのtool setが用意されていないので
何かとJavaScriptを書かないといけなくて面倒なんだな。

687:nobodyさん
09/07/27 17:02:42
このスレの>>200近辺にあるjQueryを使えば大丈夫

688:nobodyさん
09/07/27 17:09:31
>>687
何がjQueryで大丈夫なのかは知らないが、
あまりにjQueryとの親和性が悪いので
ASP.NET4.0ではjQueryを統合するとか何とか。


689:nobodyさん
09/07/27 17:42:49
×あまりにjQueryとの親和性が悪いので
○ASP.NET AJAXがあまりにjQueryとの親和性が悪いので

690:nobodyさん
09/07/27 20:19:11
>>686
UserControl、ReadOnlyプロパティから考えるにサーバコントロールじゃないの?
そもそもClientでValidationを行うのが間違いだし
超簡単にやるなら、こんなでいいんじゃない。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label" Visible="False"></asp:Label>
public partial class WebUserControl : System.Web.UI.UserControl
{
 public bool ReadOnly
 {
  get { return this.Label1.Visible; }
  set
  {
   this.Label1.Visible = value;
   this.TextBox1.Visible = !value;
  }
 }
 public string Text
 {
  get { return this.Label1.Text; }
  set
  {
   this.Label1.Text = value;
   this.TextBox1.Text = value;
  }
 }
}

691:nobodyさん
09/07/27 21:07:41
>>690
> そもそもClientでValidationを行うのが間違いだし

何故間違いなの?余計なトラフィック増やしたくないから、まずclient-sideで行なって、
サーバーはサーバーで再度validationを行なうのが常識でしょ。

692:nobodyさん
09/07/27 21:20:16
>>691
>何故間違いなの?
ああ正確にはClient「だけ」だな 言葉足らずですまんかった

>余計なトラフィック増やしたくないから、まずclient-sideで行なって、
>サーバーはサーバーで再度validationを行なうのが常識でしょ。
入力内容をポストしてValidateするのと、JavaScriptでチェックするのの、
どちらが容量が少ないかだけの観点なら、失敗される予想回数と、
Postされるデータの容量と、Validationに必要なJavaScriptの容量が関係するから、
一概にClientでチェック=トラフィックが低いとは言えないけどね

693:nobodyさん
09/07/27 23:45:26
>>692
> 一概にClientでチェック=トラフィックが低いとは言えないけどね

ああ、なるほど。トラフィックという観点ではそうだね。

実際は、ASP.NET ajaxでも、アクセスされるごとにサーバー側では
モデル等を再構築するのでアクセスごとのサーバーの負荷は並々ならぬものがあるので
なるべくならclient-sideで、というのは信念としてあるわけだけど。

694:nobodyさん
09/07/27 23:49:45
>>671
動的生成したjsの内容をいキャッシュしとけばいいよ。
ってか良くやる方法だよ。
あんまりキャッシュとか活用されないことが多かったりするけどね。


695:nobodyさん
09/07/27 23:52:13
クライアントサイドの検証コードなんてほとんどキャッシュされるから、
実質的にはクライアントでも検証を行う方が有利なことが多いんじゃないかと思うけどね。


696:nobodyさん
09/07/27 23:55:29
>>694の続き
jsファイルでやりたいなら、ashxハンドラなどで、ファイルを読んでキャッシュして
リクエスト時にはそれを返す方法でもいい。
ファイルの更新時刻を見て、例えば一秒以内程度なら前の結果を返すとか自由に制御できる。


697:nobodyさん
09/07/28 00:30:07
>>695
そこらへんまで行くと、完全に実装にかかるコストやなんやらとのトレードオフ
ISDNとか56kモデム全盛の時代は帯域が狭いから、
トラフィックも考慮されてたけど、今じゃよほど特殊な環境やページでなければ
トラフィックを気にして設計することなんかほとんどない

その証拠に、画面を描画するcssも、よくあるライブラリを記述するjsも、
必要な部分だけincludeしてるわけじゃなく、サーバに対して1つだけを設定してるだけでしょ
さらに言えば、今時、JavaScriptで入力チェックしてるサイトも少数派になってる
どうせ両方に実装するのならJavaScriptのほうは不必要という考えもできるからね

698:nobodyさん
09/07/28 02:26:18 FCPdlHYK
ASP.NETのValidatorが自動生成するスクリプトでのチェックならいいが、
自力でScriptをゴリゴリ実装するのは後で他人が多大なる被害を被るのでやめてくれ。
んなもんサーバ側でやればいいだろーが。

699:nobodyさん
09/07/28 08:13:31
前任者のソースに__doPostBackを
自前の関数から呼んでるのとかあったな

700:nobodyさん
09/07/28 09:19:48
つーか、client側にゴリゴリ処理を書くとか、むしろアリエネーとか思うんだが。
そんなの、いくらでもエンドユーザが改変可能じゃん。

原則は、全部のデータをサーバに丸投げして、あとはサーバ側でチェック。
仮にclient側のjavascriptでチェックしてても、全く同じチェックをサーバ
側でも再実施。だったら実装の手間隙考えて、微々たるトラヒックの事なん
か気にしない。(=clientではチェックしない)

701:nobodyさん
09/07/28 11:02:01
なんでajaxが出てきたと思ってる
ってまあ言いたいことは分かってるんだけどな

702:Appri童貞
09/07/28 17:08:04 sYPKb5BW
エラー発生アプリケーション xxxxxxxxxxxx.exe、バージョン 1.0.0.0、
エラー発生モジュール kernel32.dll、バージョン 5.2.3790.4480、
エラー発生アドレス 0x0000bef7

こんなログ出た人いますか?


703:nobodyさん
09/07/28 17:20:27
>>702
聞く前にぐぐれ

kernel32.dll 0x0000bef7 5.2.3790.4480
でぐぐったら、1つ目のリンクにSystem.OutOfMemoryExceptionがどうとか書いてあるぞ。

704:Appri童貞
09/07/28 17:33:53 sYPKb5BW
ありがとう^^


705:nobodyさん
09/07/28 19:06:55
死ね

706:nobodyさん
09/07/28 19:48:08
むしろ生きろ

707:nobodyさん
09/07/29 03:14:53 S6cUwBjX
>>699
ゴメン、今のプロジェクトで __doPostBack 書いてる。

708:nobodyさん
09/07/29 03:30:54
クライアントスクリプトからポストバックする方法って普通になかったっけ?
別に問題ないと思うけど

709:nobodyさん
09/07/29 07:38:21
ASP.NET2.0以降ならICallBackEventHandlerで出来るな。
しかしだからって、__doPostbackを自前で呼ぶことが許容できるかというと微妙。
十中八九、代替する方法があるだろうしな。

710:nobodyさん
09/07/29 19:40:32
リンクをcssで無効にして、Scriptでクリックすることにするという方法が簡単らしいね
ClientScriptで動作させることが前提の非ビジュアルコンポを作ったら楽かもしれない
つか、ICallBackEventHandler試したことないから、やってみようかな

711:nobodyさん
09/07/29 20:30:18
MaskedEditExtenderについて、教えて下さい。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<ajaxToolkit:MaskedEditExtender
ID="MaskedEditExtender1"
runat="server"
InputDirection="RightToLeft"
Mask="99,999"
MaskType="Number"
TargetControlID="TextBox1">
</ajaxToolkit:MaskedEditExtender>

と設定されたテキストボックスに、1を入力してポストバックなりすると
100,000と変換?されてしまします。
Mask="9,999" でもダメでした(1,000になってしまう)
しかし
Mask="999999" やMask="9,999,999"では問題ありませんでした。

これは何かの制限でしょうか?

712:nobodyさん
09/07/30 01:45:47 6Jkou0XR
__doPostback実装してもいいじゃん。ダメな理由って何がある?

713:nobodyさん
09/07/30 02:45:19
ServerControlの配置と、自分で記述するClientScriptの相関関係がまったくなくなるのが問題と言えば問題

714:nobodyさん
09/07/30 03:29:35
まったくなくなるかどうかはクライアントスクリプトの実装次第だと思うが
コールバックとポストバックは似て非なるものだから
どうしてもポストバック使いたいときもあるだろう
つか1.1まではそれしかなかったしな

ダメな理由はない
まあ、見通しが悪くなることが問題といえば問題
だがそれはコールバックでも同様

715:nobodyさん
09/07/30 06:36:24
コントロール名を変更しても、JavaScriptのほうまでは変更してくれないでしょ
だから相関関係が無くなる

716:nobodyさん
09/07/30 07:36:36
それは最初からJavascriptが間違ってるだろ。


717:nobodyさん
09/07/30 08:11:07
>>712
もちろん最終的には開発者の自由なんで、あくまで俺の見解として。

まず、前にも書いたがそんなことをしなくても
十中八九、正攻法で解決できると予想される。
また、他に方法がなかったとしても、
果たして裏道を使ってまで解決する要件か疑問が残る。

次に、そのような組み方は「らしくない」と感じる。
極端な例えだが、Responce.WriteでHTML出力してたり、
GridViewに仕込まれた無数のhiddenを見ている気になる。

最後に、フレームワークを使っていて、
ハッキング(裏道の利用)に手を染めたら負けかなと思ってる。

718:nobodyさん
09/07/30 14:41:52
>>716
違う
最初は正しかったが、IDEでaspxの何かを変更をすることで、
結果的に間違ったものになったということ

基本的にIDEの機能や本来のやり方と無縁だからこうなる

719:nobodyさん
09/07/30 18:15:21
>>715
それはスクリプトでIDなんかをハードコーティングするから悪い

スクリプトをサーバコントロールで動的に生成して出力するようにすれば
サーバコントロールとの関係は崩れない。これがAPS.NET流じゃないかな
まあ、__doPostback直接書くのはお勧めじゃない。GetPostBackEventReference使えと

.aspx側(html側)にスクリプト書いたとしても、動的に変更する必要があるところは
実行時バインド式で書いとくのが通常

720:nobodyさん
09/07/30 21:07:58
>スクリプトをサーバコントロールで動的に生成して出力するようにすれば
これが読みにくくて判読しにくいんだよな
そもそもサーバサイドスクリプトがcsに書かれてるのも違和感だし
うまく解決できないものか

721:nobodyさん
09/07/30 21:46:45
aspx側に書けばいいじゃん。


722:nobodyさん
09/07/30 22:11:19
ASP.net 2.0 なんですが、GirdViewの「編集」(正確には「更新」)のイベントハンドラを独自に記述する方法はあるでしょうか?

GridViewによるマスタメンテを実装しているのですが、GridViewはEnableViewStateをfalseにしないと更新が出来ないそうですね。
現在、ロジック側でConnectionStringを設定するつくりになっているので、EnableViewStateがtrueでないと動かないのです。
ということで%一行目%しかないかと思ったのですが、どこか参考になるURLなどご存知の方がいらっしゃれば、ご教授いただければ幸いです。
よろしくお願いします。

723:nobodyさん
09/07/30 22:18:30
>GridViewはEnableViewStateをfalseにしないと更新が出来ないそうですね。
そうなの?初めて聞いた。

>ロジック側でConnectionStringを設定するつくりになっているので、EnableViewStateがtrueでないと動かないのです。
そうなの?これも初めて聞いた。

724:nobodyさん
09/07/30 22:21:01
ゴメン、意味が分からない。
同じ環境でGridViewから更新処理してるが、EnableViewstateはTrueのままだぞ。
あと編集処理は通常CommandNameがEditであって、
更新はUpdateだから同じものでも無いはずなんだが。
まぁイベントハンドラならOnCommand辺りでフックすればいいんじゃないか。

と、ここまで書いて思い付いたが、
もしかしてObjectDataSource等をかまさずに
直接DataSourceにオブジェクトを割り当ててるとか?

725:nobodyさん
09/07/30 22:26:48
今テストしたけど、GridViewのEnableViewState=trueで更新できるな
VS2008+MSSQL2005

726:nobodyさん
09/07/30 22:41:33
エスパーすると
IsPostBackがtrueの時にDataBindするとイベントが発生しないということと、
ポストバックしてEnableViewStateがtrueの時だと、
取得時のデータと異なる可能性があるというデータの整合性や楽観的ロックの
関係とごっちゃになってるような気がする。



727:722
09/07/30 23:43:56
>>723-726
というと、これはガゼ?
URLリンク(bbs.wankuma.com)
URLリンク(yaplog.jp)

(1)削除は出来る
(2)更新も、少なくともSQLは流れてる
 ※UpdateCommandのSQL文弄るとエラーになるので
から、画面から入力した内容がUPDATE文に流れていないのだと判断したのですが・・・。

>>723
>>ロジック側でConnectionStringを設定するつくりになっているので、EnableViewStateがtrueでないと動かないのです。
>そうなの?これも初めて聞いた
初回は動くんですが、ポストバックするとConnectionStringが元に戻ってしまうらしいんですよ。
Page_loadで毎回代入してるはずなんですけどね・・・。

728:nobodyさん
09/07/30 23:58:28
>>727
>というと、これはガゼ?
それは、GridViewにデータをバインドした後に、誰かがデータを変更した場合の話

初回アクセス時にデータを取得し、それ以降はサーバとブラウザの間でポストバックして、
データを持ち回りしているので、その間にデータベースのデータが変更されても、
変更されたデータとして反映されないということ。

>初回は動くんですが、ポストバックするとConnectionStringが元に戻ってしまうらしいんですよ。
そう考えるとConnectionStringが元に戻るんじゃなくて、表示されるデータが戻ってるだけでは?
ConnectionStringをLabelなどに表示してみて、本当に変わっているかどうかチェックしてみたほうがいい

729:728
09/07/31 00:08:52
ああ、ごめん上のレスは却下
System.ArgumentException: 無効なポストバックまたはコールバック引数です。
の理由にはならないね

ただ、ポストバックで特殊なことをしてなければそんなエラーはでないから普通は関係ないはず

730:nobodyさん
09/07/31 00:14:03 dsR5PDEA
ASPでデバッグモードの時のみコードを実行させることってできます?
C#でウインドウアプリ作るときはプロジェクトの設定して
Conditional属性つければ、デバッグ時のみコードを実行させることが
できますが、同じようなことをASPでできないものでしょうか?

#if DEBUGでの切り分けはあんまり使いたくないなぁということで・・・
属性じゃなくても、似たようなことができる方法教えてもらえると助かります。



731:730
09/07/31 00:16:46 dsR5PDEA
あ、失礼しました
ASP.NETです
言語はC#です



732:nobodyさん
09/07/31 02:18:59
>>720
>そもそもサーバサイドスクリプトがcsに書かれてるのも違和感だし
クライアントサイドの間違いじゃないのか?
サーバサイドのスクリプト(プログラム)が.csに書いてあるのは普通だろう
そのために.aspxと.aspx.csに分離してあるんだから

まあ、サーバサイドとクライアントサイドのコードが混在すると
読みにくくて判読しにくいのは同意するが、これはWEBアプリの宿命的な部分もあるしな
ASP.NETな開発で考えると、そこはコントロールの作成者が苦労すれば、
その利用者は何も考えなくてよい、ってことなんだが...最大の成功例はAjaxToolkitか
実際はカスタムコントロールなんて作らんとページロジックに書く場合がほとんどだろうし
作ってもコントロール利用者=コントロール作成者な場合が多いからなw

733:nobodyさん
09/07/31 19:40:32
VS2008SP1のセキュリティがあたらねぇ
WindowsUpdateはクソだな

734:nobodyさん
09/08/01 09:06:35 7MJE4N/J
ASP.NET MVC 2 Preview 1
URLリンク(www.microsoft.com)

735:nobodyさん
09/08/01 11:34:44
mvcは要らない子

736:nobodyさん
09/08/01 11:58:07
海外ではMVCに移行してきてると思うけど
携帯向けのことも考えるとMVC以外あり得ん

737:nobodyさん
09/08/01 13:47:25
ASP.NET for Mobilesはやれば出来る子

738:nobodyさん
09/08/01 15:10:04
ASP.NET MVCちょっと使ってみて、やべー、使いやすい!
って俺は思ったんだが。
他のフレームワークでのMVC開発全くやったことなかったし。

739:nobodyさん
09/08/01 15:45:55
コードビハインドで事足りる
MVCならResponse.Writeで全部はき出すのとそんなに変わらん

740:nobodyさん
09/08/01 15:56:50
今更Web Forms vs MVCみたいなこと言ってんのかよ

741:nobodyさん
09/08/01 16:01:59
ASP.NET MVCはLAMP対策。
それ以上でもそれ以下でもない。

742:nobodyさん
09/08/01 16:07:10
使いやすい云々よりjQueryフレンドリーなのが大きい

743:nobodyさん
09/08/01 16:12:12
苦肉の策って奴だなLAMP方式

744:nobodyさん
09/08/01 22:28:24 Xxdx6Cb4
ASP.NET MVCは単テがしやすいとか聞いたがそうなの?
今までのASP.NETでは、まともに単体テストやろうとしたらかなり面倒だよね。

745:nobodyさん
09/08/01 23:07:40
つVisual Studio Team Edition for Software Testers

746:nobodyさん
09/08/02 16:46:34 Ql7mD23J
URLリンク(www.netdive.jp)

747:nobodyさん
09/08/02 21:54:48

これは便利だね

748:nobodyさん
09/08/02 22:00:36
昔のASP?


749:nobodyさん
09/08/03 00:39:33
っつーかマルウェア検出されるんだけど

750:nobodyさん
09/08/04 10:35:52
画面が重いとかクレーム付けられてンだけど、画面上にLabelとTextboxが5マンコも載ってりゃ
当然だろ常考。こっちは設計書に忠実に実装してるだけですが何か。

ページ切り替えとかの実装を要求されるンかなぁ。
更新系の画面でページ切り替えとか、考えることが増えてマジウザイんだけど。

751:nobodyさん
09/08/04 10:41:59
>>750
初心者乙

752:nobodyさん
09/08/04 14:09:01
5万項目も入力&入力チェックする人間も大変だな

753:nobodyさん
09/08/04 19:43:51
Label+Textbox合わせて最大5マンコ位なんで、Textboxだけなら2マンコ位です。
横方向にTextBoxが40×Repeaterで500ループ、なので入力チェックの実装はそれほど大変では
ないのですが、、、

実際に運用した際の入力の手間については考えていません。


754:nobodyさん
09/08/04 20:38:23
そういうのはグリッドで設計すべき

755:nobodyさん
09/08/04 20:45:22
text二万個分のViewStateやらポストやらとか考えたくもない
でも設計に口出ししなかったんだから仕方ないな

756:nobodyさん
09/08/04 21:24:45
ちなみに何を入力させてんの?
それがわからないと最適解はわからんよね
NDAとかで具体的に話せないなら、似たような事例で

757:nobodyさん
09/08/04 22:30:19
>>754
グリードってGridView?あんまりGridViewを用いるメリットが思いつかない・・・
ちなみに、サンプルに良くある「行毎にある編集ボタンを押して編集モード、編集が終ったら行ごとの更新ボタ
ン押下で再び参照モード」 って挙動は駄目なんで。
ユーザはあくまでExcelへの入力のごときフィーリングを求めてるみたい。

>>755
詳細設計から参加だから、もうどうしようもなかった。
ポストは、xmlに定義した内容を見て、Request.Paramsを分解してDataSetに突っ込むっていう部品を作っ
たんであまり気にしてません。VIEWSTATEは・・・Sessionに突っ込んでるけど、恐ろしいサイズになってそう。

>>756
顧客情報。
1営業担当あたり500人程度を想定してるんで。

758:nobodyさん
09/08/04 22:36:00
わかりにくかったらすみません
repeater全体にlinkbuttonつけたんですが、
そのどこかの行をクリックするとその行だけ詳細パネルが開いて、他の行もそのまま表示ってしようとしたところ、
パネルは開いたのですが元々あった一覧行が消えてしまいます
何が原因だと思いますか?

759:nobodyさん
09/08/04 23:01:36
Excelのごとき入力をしたい画面をWebでつくるという腐った提案ナイスだな。
Excelでいいじゃんって言ったらしばかれそうだなw


760:nobodyさん
09/08/04 23:02:09
>>757
どういう契約関係かわからんが仕様書段階で忠告があってしかるべき仕様だよな
仕様通りつくって運用上の問題が発生したのなら、当然、別料金で作り直しでしょ
仕様の設計者が社内の人間なら、泣く泣く作り直すしかないね。
設計者に飯でもおごってもらえw

それはともかく、初めからマトリクス状に500行あるってこと?
それともユーザを追加していくうちに最大で500行まで増えそうってこと?
前者なら設計が最悪、後者なら20行ごとにページングするしかないね。
各行ごとに編集や削除ボタンを設置しておけば、表全体に対して入力チェック
する必要ないし、PostBackの容量も少なくて済むし。

761:nobodyさん
09/08/04 23:07:32
>>758
>repeater全体にlinkbuttonつけたんですが、
各行に1個のボタンを付けて、それをクリックすると行の詳細が、
パネル(パネルってなに?)に表示されるってことかな?
んで、クリックするとなぜかそのクリックした行のデータだけ
repeaterから削除されてるってこと?

いまいちどういう動作をしてるからわからんので、
記述したプログラムをどこかにupもしくは
操作している最中の動きをスクショでとってどこかにup

762:nobodyさん
09/08/05 00:32:56
能力の無い馬鹿ほど最初に予防線を張りたがるよねw
大抵が、パフォーマンスが出ないのは作りがしょぼいだけ。それを仕方ないと言い訳する屑。

googlemapみたいにアジャックスつかって、見えてる部分だけデータを拾ってくるようにして、スク
ロールインした部分は随時データを拾ってくるようにすればいい。
これなら、画面上に見えてるコントロールの数はずっと少なく出来るし、レスポンスも工場する。

763:nobodyさん
09/08/05 01:14:20
何いってんだか意味ワカンネ

764:nobodyさん
09/08/05 01:27:35
>アジャックス

765:nobodyさん
09/08/05 01:41:38
TextBox20000個より阿呆がいる

766:nobodyさん
09/08/05 01:44:50
>>762
やってみろよ。
見せてくれ。
作りがしょぼいだけってんだから簡単にできるんだろ。


767:nobodyさん
09/08/05 01:49:29
まもっとも、できるできないより問題はどんだけコストをかけるのかなんだけどな。


768:nobodyさん
09/08/05 02:01:41
一方ロシアはページング機能を搭載したRepeaterコントロールを
ASP.NET AJAXを使って実装した

769:nobodyさん
09/08/05 02:39:30
>>762
要件勝手に変えて何いってんだか



770: [―{}@{}@{}-] nobodyさん
09/08/05 09:24:53
>>758
ポストバックして一覧再描画してないって落ちじゃね?

771:nobodyさん
09/08/05 11:29:00
SharePoint Server
Excel Services...

772:nobodyさん
09/08/05 13:09:46
>757

普通、OWC考えないか?

773:nobodyさん
09/08/05 21:03:42
>>757
つ jqGrid(JQuery Grid Plugin)
つ UltraWebGrid(NetAdvantage)

774:762
09/08/06 00:52:33
>>769
ハァ?
要件は全然変わってないだろ。馬鹿ですか?w

775:nobodyさん
09/08/06 01:01:32
>見えてる部分だけデータを拾ってくるようにして、スクロールインした部分は随時データを拾ってくるように
って書いてなければ、勝手にそんな機能を実装してるわけで要件は変わってる


776:762
09/08/06 01:16:17
要件の定義と機能の設計の違いが分からない馬鹿しかいないの?

777:nobodyさん
09/08/06 01:23:02
検索した時のスナップショットってのが必要かも知れんがな。
まあそれはおいといて早く作って見せてくれよ。
実装イメージでもいいぞ。


778:nobodyさん
09/08/06 01:34:52
「要件」という言葉を、「(システム開発の)要件定義」のことだと、勝手に論理のすり替えして楽しい?

>>757
「詳細設計から参加だから、もうどうしようもなかった。」って記述してるんだから、
すでに詳細設計書が存在してるわけで、この場合の「要件」とは、
その詳細設計書を実現するのに必要な条件のことでしょうよ。

>よう‐けん〔エウ‐〕【要件】
>1 大切な用事。「―のみ記す」
>2 必要な条件。「教育者としての―を満たす」

779:nobodyさん
09/08/06 01:47:15
そもそも、ブラウザの画面をスクロールさせて、コントロールが表示エリアに入ったことをフックできるイベントなんてあったっけ?
仮に出来たとしても、cssで非表示させてるだけならhtmlのファイルサイズの削減にはならないから軽くならないし、
ポストするデータサイズも同じだし、むしろスクロールする度にJavaScriptのイベントが発生するから、
ベタに表示させるより重くなるんじゃね?

ASP.NET AJAXでスクロールするたびに動的にコントロールを生成するのなら、
初期に表示されるコントロールが少ないからhtmlのファイルサイズの削減にはなるけど、
スクロールさせるたびにサーバに問合わせてコントロールを表示させてデータを表示させるなんて、
物凄く遅くなるんでないかな。
さらにデータが変更されたテキストボックスが表示エリアから消えた場合、
それを復元する術がないから、非表示になったテキストボックスのデータも
いちいちサーバにポストバックして保存しないといけない。
そんなことするなら、ベタに5万個のテキストボックスを表示させたほうが軽くないか?

780:nobodyさん
09/08/06 02:03:42
簡単に実装するなら <iframe> を縦に並べてスクロールインしたときにページ単位でロードするだけでいい。
お前にも作れるよ。

781:nobodyさん
09/08/06 02:16:18
複数行にまたがって変更する場合どうすんの?

782:nobodyさん
09/08/06 02:21:31
でそれはべたに作るより速いのかね?


783:nobodyさん
09/08/06 02:30:15
50ページに分割したら最初にロードするのは1000個だけですむ。
遅くなる理由が見つからない。

784:nobodyさん
09/08/06 02:31:02
onscrollでスクロールされたイベントは発生するが、
どのコントロールが表示状態になったかは取得できないな
従って、絵に描いた餅

Flashかsilverlightなら可能だと思うが

785:nobodyさん
09/08/06 02:35:15
>>783
単にページ分けでいいじゃん

786:nobodyさん
09/08/06 02:43:39
全件表示か、ページ分けしての表示なら問題ないが
1つのページに複数のページが表示されるのは機能的に問題

データはいつ削除されるか追加されるかわからないんだから、
最悪の場合、50ページすべての行に同じデータが表示される可能性がある
そして後からデータが追加されて51ページ目が発生した場合にも対応できない。

787:nobodyさん
09/08/06 05:47:17
ページ分割というか、まあ1画面に表示する項目を絞れば早くはなるだろうな
後はAJAXなりで適当にスクロールしてるように見せかければいい


>>786
そういったことを防ぐために排他制御って考え方があるんだが
機能的に問題かどうかは、ロックがどうなってるかによる
普通のWEBアプリに見られるような楽観的ロックなら問題かもしれないが
適切なロックがあれば問題ない

そう考えると元の設計は、もしかするとロックするから
全項目を1画面に表示したいのかも知れない...と思ってみたがたぶん違うなw


788:nobodyさん
09/08/06 08:19:08
楽観的排他制御じゃないロックなんて普通は最後の手段に近いけどな。
まずはセッションとかでどうにかならないか考えるだろ。
あと数を絞れば速くなるに決まってるなんて言ってるのがいるが、
ホントに試してみたのかい?

789:nobodyさん
09/08/06 08:21:18
例えば一気に端から端までスクロールしてもまともに動くのか、
実は最初から全部読んだ方がスムーズだったなんてことはないのか。

790:762
09/08/06 09:46:36
>>778
詳細設計から参加、つーたら、普通は詳細設計書を書くところから参加という意味だろ。
馬鹿なの?死ぬの?


791:nobodyさん
09/08/06 13:11:14
いいこと思いついた。スクーロルバーは標準のスクーロルバーじゃなくて、ボタンか何かを
配置して、画面上には常に固定のコントロールを配置。
で、スクーロル下をボタンをクリックしたら
txtbox2の内容をtxtbox1に
txtbox3の内容をtxtbox2に
txtbox4の内容をtxtbox3に
txtbox5には新規にDBから取得した内容を新規にセット
ってやれば、画面上には常に一定数のコントロールしか表示されないし、PostBackerの処理
も簡単で一石二鳥じゃね?

792:nobodyさん
09/08/06 14:01:14
>>790
突っ込まれると思ったw
詳細設計時に存在するには内部設計書だな。すまんかった。

つーかいちいちプログラムと関係ないところのツッコミしかできないのかよ?
吐いた唾を飲み込むの?死ぬの?
唾飲み込むぐらいじゃしなねーけどwww

793:nobodyさん
09/08/06 14:14:19
>>787
Webアプリで1画面表示する間、ずっとデータベースをロックしろとでも?
この場合、いつ最下部のページを表示する画面にスクロールかわからないから、
ページをみてる間はずっとロックかけてる必要がでてくるわけだが。
他人が使う可能性や、ブラウザのページの切り替わりの
可能性なんて考えたら、そんなロックは実用上不可能だろ。

結局、重複させない、または表示途中で削除されたデータに対応するには
クライアント側(ポストバックかクッキー)かサーバ(セッション)でデータを持ち続け、
最終的に楽観的ロックで確認するしかない。

>>791
2万行あったら最下部までたどり付くのに2万回クリックすんの?ww
そうなると100行単位とかのページ単位で切り替わるほうがいいんじゃね?
それでも200回クリックじゃつらいから、10ページ前に戻る、10ページ後に進む的な
ページングのボタンを設置したほうがいいんじゃね?
そうなると>>768で答えは既にでてる。

794: [―{}@{}@{}-] nobodyさん
09/08/06 15:33:22
ま、作る前にワーニング出さなかった君の負けだよ。

Ajax、XBAP、Silverlight、Flashなんでもいいから
ユーザビリティーの良いのに作り直す事だね。

795:nobodyさん
09/08/06 15:40:39
キミちゃんと最初から読んでる?

796: [―{}@{}@{}-] nobodyさん
09/08/06 15:51:43
>>795
ああ、読んでるよ。
設計書通りに作ったんだろ。

設計書見た段階でこりゃ動かんわってわかってたんなら
その段階で何かするべきなんだよ。

ちゃんとせんから余計な後戻りが発生するんだ。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch