読者です 読者をやめる 読者になる 読者になる

ASP.NETで特定のページをForms認証外にする方法

やりたいこと

ASP.NETで登録済みのユーザはForms認証を使ってログインページからログインをしますが、新規登録ユーザには別途新規登録用画面へ遷移できるようにする方法です。

通常web.configにForms認証を指定した場合、認証済みでない場合はログイン画面へ遷移されてしまうため、ログイン画面に新規登録画面へ遷移するリンクを貼ってもリダイレクトされて遷移できません。

f:id:nooootion:20170225223821p:plain

やり方

そこで特定のページ(もしくはディレクトリ)に対してのみ特別な設定をしたい場合は

locationタグ内に記載します。

f:id:nooootion:20170225224537p:plain

まとめ

今回はプロジェクト直下に.aspx、web.configを配置していますが、

Forms認証対象画面とそれ以外の画面でフォルダを分けて管理した方が分かりやすい気がします。

ASP.NETのGridviewヘッダー固定(IE11対応)

仕事で ASP.NETのGridViewでヘッダー固定したものが表示ズレ起こすとのことより調査。

 

開発環境

Visual Studio2005

ASP.NET ver?

IE10

 

経緯

5,6年前に作られた某社内で使用している業務用のシステムで、

GridViewを使って一覧表示しているヘッダーを固定させている。

使用しているとたまにヘッダーがスクロールした分移動する現象が発生しており原因対策を依頼された。

 

現状のヘッダー固定方法

以下のようなCSSを使用した方法でヘッダーを固定していました。

f:id:nooootion:20170218095053p:plain

f:id:nooootion:20170218095312p:plain

divでGridViewを囲んで、高さ指定からはみ出した分をoverflowでスクロール表示させます。また、GridViewのHeaderStyleにClassでposition指定します。

 

この方法の場合、ドキュメントモードをIE7にしないとヘッダーは固定されないようです。IEの仕様変更?でしょうか。

f:id:nooootion:20170218101420p:plain

今回問題になっているヘッダーがズレる現象ですが、動作を調べていたところスクロールした後にGridViewに設置したCheckBoxにマウスオーバーした際に発生することが分かりました。

f:id:nooootion:20170218102207p:plain

(ヘッダーがズレてる。。。)

解決方法としては以下のブログを参考にさせて貰いました。

ありがとうざいます。

ledsun.hatenablog.

 

CSS修正

自分は以下のようにCSSを修正しました。

tableタグに相当するid:GridView1に全体の横幅を指定して、theadタグをfloatで左寄せで表示されるように配置。ここでthタグよ幅を合計で全体の横幅と同じになるように設定すれば、後に続くtbodyタグは一段下に配置されるので結果としてヘッダーが固定されているように表示されます。

f:id:nooootion:20170218114412p:plain

 

デバッグしてみる

無事にIE11でもヘッダー固定してスクロール後にCheckBoxマウスオーバーしてもヘッダーがズレることはありません。

f:id:nooootion:20170218114025p:plain

 

まとめ

上記方法だとfloat:leftした際にborder-lineが消えてしまいます。

別途指定する必要がありそうですね。

また、なぜCheckBoxにマウスオーバーした際にヘッダーが移動するのかは謎です。

 

 

ASP.NETのセッションにいつて

ASP.NETで業務向けのwebサイト保守をしています。

Form認証を使用しており、セッションが切れた際にログイン画面に戻りたいがアプリケーションエラーになるとのことで調査していました。

まず、セッションタイムアウトとForm認証のタイムアウトが同じ60分に設定されていたのでセッションタイムアウトの時間を60分より長く設定し、必ずForm認証が先にタイムアウトするようにしました。

でも何故か20分でセッションタイムアウトになりアプリケーションエラーしてしまいます。

configの設定だけでは駄目らしい。

どうやらデフォルトでワーカプロセスが20分で切れる為、それに伴ってセッションタイムアウトするらしい。

方法としてはコネクションプールのアイドル状態をデフォルトの20分から変更するか、セッションステートをステートサービスにするか検討中です。ステートサービスにするにはサービスで起動する必要があります。

Xamarin for Visual Studioのiosシュミレータでハマった話

Mac Book AirからMac Book Proに買い替えたため、Parallels Desktop11にWindows10を入れて、Visual Studio2015を使ってiosシミュレーターを起動させようとしたところXamarin Mac Agentの接続ユーザ名とパスワードを入れてもエラーで接続できない。以前やった時はできたのに何故かと悩んでいたら、普通にエラーメッセージに「Xcode license must be accepted in order to be connected and working against the Mac」と表示されているのに気づかなかった。。。

Xcodeインストールはしたけどまだ起動してなかったw

一度起動させてから再度Xamarin Mac Agentで試したところが無事接続できた。

情けないw

swift3ことはじめ

会社の勉強会でswiftをちょっと触ったので久しぶりに真面目に使ってみたくなった。

自分がios開発を初めてやったのが、もう5、6年も前のobjaective-cの時代の事。

当時はまだプログラマに転職する前で、某製造メーカで営業をしていたが、趣味でプログラミングを初めて、最初に触ったのがobjective-cだった。

単純にどうせやるなら自分の興味あるiPhoneアプリを作ってみたくて始めた訳だが、初心者にios開発は厳しく全然分からなかったが、何だかんだ以外に面白かったので、仕事でもプログラミングしたいと思って転職まで至った。

swiftが全然わからないが、取り敢えずストア公開するためにサンプルアプリを改造してリリースしてみよう。勉強が目的にならないように気をつけねば。。。

 

XamarinでUITableViewのセルをタップしても画面遷移できなくてはまった話。

久しぶりにXamarinでios開発をやろうと思った際にちょっとはまりました。

UINavigationControllerの下にUITableViewControllerがRootとしてあり、

その中のセルをタップすると次のUITableViewControllerが表示されるように画面遷移したいのに、遷移できない。なぜだ??

答えは簡単でした。

storybordを使用した場合、UITableviewCellのIdentifierプロパティを設置していませんでした。

この値をMyCellとして(何でも良いけど、後でプログラム内で使用)、

f:id:nooootion:20160809204838p:plain

UITableViewに一覧表示するためのUITableViewSourceを継承したクラスのGetCellメソッド内のUITableViewCellのIDとして使用すればOK。

f:id:nooootion:20160809204852p:plain

久しぶりに触るとすっかり忘れて完全にはまりました。

XamarinでSqliteに接続(ADO.NET)

どもやっとXamarinでSqliteに接続してデータを取得することができたmorimoriです。

今回はその方法を紹介します。

XamarinでSqliteに接続する方法はいくつかあるみたいですが、今回はみなさん良く利用するADO.NETを使用します。

 

①画面作成

まずSingleViewにラベルとボタンを貼り付けます。

このボタンを押した際にDBからデータを取得してラベルの表示を変更する簡単なプログラムを作成します。

f:id:nooootion:20160627230746p:plain

②dllの準備

ReferencesにMono.Data.SqliteとSystem.Dataを追加します。

また、ResourcesにSQLite.csを追加します。

SQLite.csはOSSから拝借します。

https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs

f:id:nooootion:20160627231010p:plain

f:id:nooootion:20160627231128p:plain

 

③DB接続用のクラスを作成

下記の様なDB接続後にデータを取得するクラスを作成しました。

DB名はdb_test.dbでテーブル名がtest_tableになります。

今回の場合はsqlitebrowserでテーブルを取得するデータを作成してあります。

f:id:nooootion:20160627231540p:plain

f:id:nooootion:20160627232027p:plain

 

④ViewControllerからDB接続クラスを読んでデータを取得する

f:id:nooootion:20160627232227p:plain

ボタンを押した際に先ほどのDB接続クラスからデータを取得します。

そうするとラベルの値がDBから取得したデータに変更されます。

f:id:nooootion:20160627232356p:plain

 

⑤最後に

Sqliteの使用方法についてはMapingを使用することで、SQLをだらだらと書く必要が無いやり方もあるようなのでそちらも試してみたいですね。