メイン » 仕事の周辺 » .NET » ASP.NET

2007年05月15日

GridViewのヘッダを固定

ASP.NETでデータグリッドのヘッダをエクセルのように固定したい、と誰でも思うはず。ソートがあんなに簡単にできるのなら、ヘッダの固定ぐらい簡単なはず。と期待を込めて探し回ったら、これが一番簡単そうです。CSSを3行ほど書くだけで、ヘッダを固定してくれます。Panelの横幅を100%にすれば勝手に伸び縮みしてくれます。ウインドウを広げたり狭めたりしているとはずみでヘッダが消えたりすることもありますが、社内で使うのならこれで十分です。
一番最初の元ネタサイトはドメイン期限切れ中みたいなので、非常に助かりました。

投稿者 idic : 21:04 | コメント (0)

2007年06月13日

Webアプリをメンテナンス中に切り替える

ASP.NET2.0になって追加された便利な機能を調べながらより管理が楽なWebアプリの作成ガイドラインのようなものを作成中。年明けにコピーライトのところの年表示をあちこち書き換えて回るようなことは止めようよ、レベルのプリミティブな話なのですが(^^;)、それらに加えサーバーのアップデート等の際に簡単にメンテナンスモードに切り替えられれば楽だなと。
2.0のWebサイト管理ツールにあってもよさげだと思ったのですがそれらしいものが見当たらず。自前で作るなら「メンテナンス中です」ページを作成し、DBかコンフィグからフラグ読んでGlobal.asaxでリダイレクトかな、メンテナンス中ページのファイル名はやはりMaintenance.aspxかな、で「Global.asax」と「Maintenance.aspx」で検索したらありました。見つけた時はコピれば終わりじゃん、と思ったのですが、色々はまってしまいました。
まず、2.0ではGlobal.asaxにApplication_BeginRequestセクションがない。調べるとVS2005のテンプレートにはないけどイベント自体は存在するらしい。2003だとプロパティ画面でイベントの一覧が確認できたのに、2005で表示の出し方が分からず、手で入力。
で、入力後実行したら今度はデザインがとんでしまってます。CSSファイルにまでこのイベントが適用されているっぽい。しょうがないからパターンマッチで拡張子をチェックし、aspxファイルにのみ適用するに変更。
無事トップページがメンテナンス中表示に切り替わることを確認。サブフォルダ内のページに直接アクセスしたら、ページが見つかりません。サンプルの"Maintenance.aspx"を"~/Maintenance.aspx"に書き換えやっとメンテナンス表示に切り替わったと思ったらまたデザインがとんでしまってます。このあたりでだんだん根気が切れそうになってきます。
メンテナンスモードをoffにした時と、onにした時のソースを確認すると、CSSへのリンクがoffの時「../App_Themes/…」、onの時「App_Themes/…」とずれてます。サブフォルダ内から外にあるMaintenance.aspxへリンクしているのですが、表示されているソースはMaintenance.aspxのままだけれど、URLはサブフォルダのままなので、スタイルシートとの位置関係がずれてしまっているようです。URL変わらない方がかっこいいけれど、メンテナンスのことを考えると別に変わってもいいではないか、と思って「HttpContext.Current.RewritePath」を「Response.Redirect」に変えてみたらリダイレクト先からさらにリダイレクトされてえらいことになってしまいました(^^;)。ここでぶちきれ帰ってきましたが、こうして書いていたら、もう一つパターンマッチ追加しMaintenance.aspxだったら無視するようにすればいいかな(^^;)。
とりあえず上記のサンプルを2.0用に書き直したサブフォルダがなければ使えそうなバージョン
void Application_BeginRequest(object sender, EventArgs e)
{
//
// Check the web.config to see if the site is in maintenance mode
Regex r1 = new Regex("\\.aspx");
if (r1.IsMatch(Request.RawUrl))
{
if (ConfigurationManager.AppSettings["Maintenance Mode"] == "on")
{
HttpContext.Current.RewritePath("~/Maintenance.aspx");
//Response.Redirect("Maintenance.aspx");
}
}
}

投稿者 idic : 21:30 | コメント (0)

2007年06月15日

利用権限のあるプログラムだけメニューに表示

本日はASP.NET2.0から追加SiteMap機能を使ってみました。一つのXMLファイルからサイドメニューとパンくずリストとサイトマップを作成するのはAxKitでもやっていたのですが、なんと要素名が違うものの構造がほぼ同じ。まあ誰が考えても同じ形になるような気もしますが(^^;)。あと.NETにはあって私のにはなかった便利な要素が「role」。これはAxKitでも使えるかも。
このroleの機能を使うと、メニューに「○○さん専用」とか書く必要なくなり随分すっきりします。ところが今まで認証が必要なページにアクセスしようとした際にログインページへリダイレクトしていたので、ログイン前のメニューから消えると入り口がなくなってしまいます。で、ログインページをサイトマップデータに含めたのですが、ログインしても消えない、というか消し方が分からない。別にリンクを作るしかないのかな。あとAxKitではサイトマップデータを管理しやすいようにいくつかに分割しているのだけれど、なんか1枚目のマスタにTreeViewをはったら、2枚目のマスタにSiteMapPathをはった際データソースを指定しなくても1枚目のマスタのサイトマップデータがそのまま使われていて切り替える方法が分からない。
まあAxKitを.NETで置き換えることは当分ないと思うけれど、ちょっと心が揺れたのも事実です。

投稿者 idic : 22:31 | コメント (0)

2007年06月16日

'ASP.login_aspx' を型 'System.Web.UI.WebControls.Login' に変換できません。

いくらなんでもキーワード減らさなきゃ1件もヒットしないだろうな、と思いながらもエラーメッセージをそのままコピって検索したら、ヒットしてびっくり(^^;)。バグだそうです。

投稿者 idic : 22:57 | コメント (0)

Web.configの管理

Web.configの暗号化を試してみました。自分の開発用マシンでやったので特に問題なく暗号化でき、テキストエディタで開いて確認したのですが、IISの管理ツールで確認したら暗号化したはずの接続文が暗号化前の状態で表示されてるんですが、これはこれでいいんでしょうか(^^;)。設定が間違っていないかどうかいちいち複合化しなければチェックできない、と思っていたので楽っちゃ楽ですが。
Web画面の方のWeb.config管理ツール(Web サイト管理ツール)の方はどうかと思ったらこちらは項目自体がない? その代わり「アプリケーションをオフラインにする」するリンクを見つけました。これを使えばメンテナンス中に切り替えられる?と思って試したら、オフライン中はNot Found(404)のエラーが出ます。苦労して作ったメンテナンスページは無駄ではなかった(^^;)。

投稿者 idic : 22:59 | コメント (0)

2007年06月23日

ASP.NET2.0の公開

運用中サーバーにフレームワーク2.0を入れました。ASP.NET2.0のプログラムを一つコピーし、動作を確認し、念のために既に稼動中の1.1のプログラムの動作を確認したらエラーが。アプリケーションプールを分けるのを忘れていたのでした。業務終了後でよかった(^^;)。

投稿者 idic : 20:43 | コメント (0)

2007年07月04日

テーマ毎に画像ファイルを切り替え

CSSファイルの背景画像等は、テーマ毎のサブフォルダに入れておけば問題ないけれど、その他の画像もグレー系のもの以外は今後のことを考えすべてテーマの下に放りこみたい、と思ったのですがその時真っ先に思いついたのが、Web.configからテーマの名前を取得し画像のパスにする、だったのですが、正解は画像もサーバーコントロールにし、SkinIDを指定する、かな(^^;)?ただ、デザイン画面ではエラー表示になり実行しないとデザインのイメージがつかめないみたいなんですが。どちらにせよマスターページ使ったりすると実行しないと分かりませんけどね。

投稿者 idic : 22:41 | コメント (0)

2007年07月06日

テーブルを動的に作成

幾つかのフラグによって、テーブルに表示する行の内容を動的に変えたい、さあどうするか?
1.DataTableを動的に作成し、DataGridにバインドする
2.デフォルトのDataTableを作成しておき、DataGridにバインド後、表示してはだめなものを隠す
3.Table Web サーバー コントロールに行およびセルを動的に追加する
4.テーブル用のデータをXML化しておき、XPathで簡単に取り出せるようにアトリビュートにフラグの値を突っ込んでおき、DataGridにXMLをバインド

デザイナさんがいたりして既存のテーブルデザインがある時は「3.」が楽かも知れませんが、DataGridでいいときは「4.」が楽かも。

投稿者 idic : 22:53 | コメント (0)

2007年07月07日

テーブルを動的に作成 その2

昨日の分に追加
5.XMLをXMLコントロールに直接貼り付けXLSTでテーブルに変換
6.XMLをリピータに貼り付け

テーブル表示でおしまいでXSLTに抵抗がなければ「5.」が一番自由度高いし、既存の知識だけで解決できるので便利です。今回はテーブルの行を選択可能にして選択行のサブメニューを表示する(リピータを入れ子にする)必要があったので「6.」の方法で行くことにし、コーディングを開始したら仕様の変更が(^^;)。
ということでどの方法も最後まで試さないまま、現在ウイザードコントロールの調査中です。めちゃめちゃ便利で簡単そうなのに、デザインのカスタマイズ方法がよくわかりません。「ステップ」のリンクを左サイドではなく、上に持ってきて画像に変えたいだけなんですが。サンプル少なすぎ。

投稿者 idic : 22:51 | コメント (0)

2007年07月09日

ウイザードコントロールのサイドバーを隠す

Wizardコントロールをカスタマイズしようと四苦八苦してました。Professional ASP.NET 2.0 (Programmer to Programmer)にはSideBarEnabledというプロパティが載っているのに、一覧に出てこないし手入力してもそんなん知らんといわれるし。ググッたら全く同じ質問をしている方がおられました。最後に付いてる(!!!)も私の気持ちにぴったり(^^;)。質問者と回答者のお二人に感謝です。いつ変わったのか(それともSideBarEnabledが消えただけなのか)知りませんが、古いサンプルをみながら勉強している方は要注意です。

肝心のプログラムの方は、せっかくサイドバーを消すことができたのに、YES/NOの判定ページとその選択によってスキップするページがあったりと、複雑なフローになってきたのでWizardは捨てMultiViewに乗り換えました。

投稿者 idic : 23:00 | コメント (0)

2007年07月22日

MultiViewのアクティブViewをIDで切り替える

参考書にはActiveViewIndexで切り替える方法しか載ってなかったのですが、仕様の固まらない複雑なフローをコントロールしてるとインデックスでは不便すぎ。コントロールにIDが付いているのだからIDで切り替えられて当然のはずなのにActiveViewIDが見つからない。全部のViewのVisibleをfalseにし、指定されたIDのViewだけをtrueにするような処理を自分で書くんかい?と思ったらSetActiveViewを使うんだそうです。Aで探してもないはずだ(^^;)。
それにしてもMultiViewは便利ですね。お気に入りのコントロールになりそうです。

投稿者 idic : 21:37 | コメント (0)

2007年10月30日

Web Client Software Factory

探せばなんでもあるものだ(^^;)。
SiteMap機能を使ったりテーマ機能を使ったりメンテナンスに切り替える機能をつけたりしてるとバラバラのプロジェクトを全部この中に入れたい、と思うようになってくるものです。一つのプロジェクトにまとめれば問題ないのでしょうがそうなると今度はプロジェクトが巨大化してしまいます。複数の開発者でもそれぞれの担当箇所を管理できるように、XOOPSみたいに全体のデザインやユーザーの権限管理を行うフレームワークとその下で個々に動くモジュールみたいに分離できないものかと思い探したら似たようなものが配布されてました。
さっそくここからダウンロードしてインストールしてみました。まず日本語版のService Pack 1を入れてしまっていたためRequired Componentsのところのサービスパックのところが警告マークになって消えない。抜いて入れ替えようと思ったけれどアンインストールの方法も分からず諦めかけるも、とりあえず入れてしまえ、で未だ入れていなかった.NETフレームワーク3.0も日本語版を入れる。こちらは日本語版でも警告マークは消えました。
警告マークが残ったままインストールしましたが新規作成時にテンプレートが表示され選択するとちゃんとプロジェクトが作成されました。そのまま実行するとそれなりのデザインが入ったデフォルトページも表示されました。

投稿者 idic : 20:40 | コメント (0)

2007年11月01日

PageFlow

WorkFlowのチュートリアルで何かそのまま応用できるような身近なものはないかと探したところ、肝心要のこちらのチュートリアルが全部リンク切れ。
気を取り直し、同じやるならやはりWebのサンプルがいいかなとPageFlowで検索したら手ごろなサンプルを見つけました。ダウンロードしインストールするとテンプレートはちゃんと登録され、新規プロジェクトは作成できるようになりましたが、サンプルの方を開こうとするとプロジェクトが一つ立ち上がらない。急ぎの別件入ったしこのまま当分放置かも。
自宅で遊ぶには無料版があるので2005は不要かなと思ってたけどこうなると欲しくなってくるかも。

投稿者 idic : 21:51 | コメント (0)

2007年11月08日

Web Service Software Factory

VS2005で初めてWebサービスを作成中。2003のビジネスロジックのDLLを参照追加してコンパイルするとエラーがでたもので(^^;)、自分が作ったのではないビジネスロジックのソースを探してチェックするよりは新しいサンプルもらってこようと検索したらまた今度はWeb サービス ソフトウェア ファクトリにぶちあたりました。ラッキー♪っと思ってインストールし新規プロジェクト作成したら山盛りプロジェクトが作成されました(^^;)。それぞれ対話形式で必要なものが追加できるようですが日本語ドキュメントないしめげそうな量です。

投稿者 idic : 22:38 | コメント (0)

2007年11月11日

Windows Communication Foundation

せっかくWeb Service Software Factoryを使って新規作成したプロジェクトなので何とかめげるところまでやってみようとドキュメントを読み始めたらいきなり道が二つに分かれてました。慌ててもう一度新規作成画面を確認すると確かにテンプレートが2種類あります。作成時には何も考えずに見慣れたAXMXを選んだみたいです(^^;)。もう一つの方がWCF(Windows Communication Foundation)
サービスファクトリを使った日本語のドキュメントはこれくらい?こちらの方がWebクライアントファクトリよりも古そうなので探し損ねているだけかも知れませんが。

投稿者 idic : 21:03 | コメント (0)

2007年11月13日

カスタムMembershipProvider

ログインコントロールを使うべきか今まで通りの方法でやるか悩み中。
ログイン用のWebサービスと連動させようとするとCustom MembershipProviderを書かなければいけないらしい。勝手にユーザーの作成も編集もさせるつもりはなく、パスワード忘れ対策もする気はないし、なんか必要のない機能が多すぎでコントロールをぼとっと落とすだけでHTML組まなくていい以外に何かメリットあるのかなーと。
今のところ、他人に引き継ぐ時は既存のものを使っておく方が親切かも、というのとここにある「また、同じ ApplicationName を指定すると、複数の ASP.NET アプリケーションが同じユーザー データ ソースを使用できます。」という一文くらいでしょうか。もう一押ししてくれる何かないか調査は続く…です。
悩んでいるうちに書け、といわれそうですが使用目的が若干違うような気がするもので。XOOPSのようなコミュニティサイトならぴったりな感じがします。

投稿者 idic : 22:40 | コメント (0)

2008年01月09日

Web Client Software Factory再び

簡単なASPを一本頼まれるもインストール先サーバーに既存のプロジェクトがなく、当たらしく作る必要があったので、どうせならとWeb Client Software Factoryに再チャレンジ。前回は確かカスタムMembershipProviderあたりで放置中。これは勉強をかねて現在のプロジェクトを書き換えるためのものだったのでほぼ無期限放置中(^^;)、だったのですが書き換え前のプロジェクトをコピーして種類増やすと書き換え時に手間が増えそうなのと、本日追加のプログラムは特に認証必要ないものだったので、メニューとテーマだけでも使おうと再チャレンジ。
結果はまたもや挫折(^^;)。sitemapモジュールが簡単に動いたので幸先よかったのですが、追加したプロジェクトにページを追加した際、データソースをウイザードで追加できず、えっデータアクセスクラスを自前で作成する必要あるの? なんかもっと簡単に出来る方法はないの? といじくっている間に時間切れ。結局古いプロジェクトをコピーし、テーマとログインやログ部分だけを残し不要部分を削除、新しいページを1枚追加しマウスぐるぐるでテキストボックス、ボタン、グリッドビュー1個ずつのページを作成。コピーから完成まで10分ちょっと。数時間の残業で残ったのはこの部分だけかも(^^;)。
本日見つけたリンクだけ今後のために残しときます。

投稿者 idic : 23:11 | コメント (0)

2008年04月12日

GridViewのnowrap

DataGridの時もそうでしたがGridViewでもカラムを自動生成させると、どこにWrap=falseを入れても改行されてしまいます。抽出にはたいてい印刷が絡むので、項目数が多い時はたいていエクセルで印刷できるようにしていたので今まであまり不便に感じていなかったのですが、本日出せるものは全部出して、後で不要なものを削るからといういやな注文(^^;)が入ったため、カラムの自動生成以外使いたくなかったので、調べてみました。Wrap=falseを入れまくって実行した結果のソースを見るとtdではなくtrタグのところにnowrapが入っています。これでは効くはずありません。tdに対して定義するにはスタイルシートでコントロールするしかなさそうです。
GridViewの開始タグにCssClass="gridv"を追加し、CSSファイルの中に次のように書いておいたらちゃんと効いてくれました。
.gridv td
{
white-space:nowrap;
}

投稿者 idic : 23:49 | コメント (0)

2008年04月19日

ADO.NETでmySQL接続 再び その2

ASP.NET2.0にコンバートしたプログラムが問題なく動いていたので、2.0で新規作成したWebSiteにMySQL Connector Net 1.0.5のDLLを参照追加したところ、binフォルダに現れなかったため、2.0用のDLLをもう一度追加し実行したら名前がかぶっているというエラー。参照追加の「参照」画面でDLL削除したら参照元のDLLがゴミ箱に移動されるし(^^;)。
どこに参照設定残っているのかと思って探したら、Web.configファイルにありました。あせった。最初から作り直す必要あるかと思った(^^;)。

投稿者 idic : 14:10 | コメント (0)

2013年04月27日

Visual StudioでKnockout.jsのインテリセンスが利かなくなったら

次にKnotckout.jsをいじのは当分先になりそうなので(バグや仕様変更なければですが)、忘れそうなことをメモ(^^;)。

「Scripts」フォルダの「_references.js」を確認。Nugetでバージョン上げてもここが自動で変わらない。
古いViewを編集中は気がつかず、新しいViewに変えたとたんインテリセンスが利かなくなるのでバージョン上げたことを忘れてあせる。

投稿者 idic : 22:17 | コメント (0)

Knockout.js 変更前の値に戻す

値を監視し、条件によってはエラーメッセージを出して値を変更前に戻す…よくあるパターンですがここを参照しました。
ただし、元に戻した時も監視されるので、条件を満たす選択肢が存在するようちゃんとロジック組んでから実行しないとポップアップが出続ける無限ループに(^^;)。

投稿者 idic : 22:32 | コメント (0)

Knockout.js サーバーへ上げたら動かない

JSON読めているかどうかチェック。
1.JSONのURL固定で書いてないか?(ローカルとサーバーでパス変わる)
2.プロジェクトには含まれていないローカルの静的なJSONをサーバーに上げ忘れていないか?
  (JavaScriptの文法チェックがうざくてプロジェクトから除外したファイルは発行ではもっていってくれません)

投稿者 idic : 22:51 | コメント (0)

Knockout.js 選択肢の初期値は変数で渡す

土日はさんだ三日前の私は他人。何でこんなのわざわざ変数にしてるわけ?と思って削りかけたらその上には「デフォルトを参照で渡すため」というコメントが。書いた過去の私に感謝。

投稿者 idic : 23:04 | コメント (0)

Knockout.js オブザーバブルの値は()で取得

いや、分かってるんですが、わかってるんですが意外にこれがKnockout.jsの一番のネックかも。
バインダが()無しでも動く親切設計がまずいような。必ず()が必要、というのであれば直ぐ慣れるのに、なまじtext: price で金額表示されるから、そのまま素直に合計表示しようとしたり、さらに下の階層のプロパティにアクセスするのに()忘れて怒られたり。値をalertさせてみてはじめて「あ、そうだった」と言うのが何度も。自動でマッピングさせた時など特に自分ではデバッグで貼り付けたJSONを扱ってるつもりなので何度も何度も似たようなところではまる。階層深いと上でアンラップしてるからとついつい()を忘れる。最初からカスタムバインド作成する方が早いかも。

投稿者 idic : 23:31 | コメント (0)