[ASP.NET] showModalDialogのポストバックで新規の画面が開いてしまうの対応

ASP.NET+IE9で開発していて、javascriptでshowModalDialogで開いたモーダル画面のポストバックを行ったところ、新しい画面が開いてしまい、元の画面が更新されない不具合が出てしまいました。(その対応備忘録です。)

新しい画面が開いてしまうと困るので、ググったところ、
<head>セクションに、基準となるターゲットウィンドウ(ターゲットフレーム)に自身を指定すれば幸せになれる情報がありました。
  <base target=”_self” />

早速記述したところ、幸せになれました。
尚、FRAMESETを利用する方法も有るそうです。

以上

[ASP.NET] 404pag enot found対応

ASP.NETの学習備忘録です。

現在、SEOの学習をしているのですが、不要なファイルを削除した結果、Googleの検索エンジンからファイルが見つからない旨の404pag enot foundが発生しているとお知らせが来ました。

そこで、404対応をしたのその時の対策方法です。
対策は非常に簡単で、対応メッセージaspxもしくはHTMLを作成後、web.configファイルに以下の設定をするだけです。
<customErrors mode=”RemoteOnly” defaultRedirect=”AppErrors.aspx”>
<error statusCode=”404″ redirect=”page-not-found.aspx”/>
<error statusCode=”403″ redirect=”page-not-access.aspx”/>
</customErrors>

えっと、403対応もここではしています。
403はアクセスできないケースで、発生するエラーです。
とりあえず、ユーザの為のエラー対応という目的も有りますが、不要な情報も出したくないとい目的も有りますので、簡単にできることですからサイトには404及び403対応を組み込んだほうが良いと考えています。

以上。

[ASP.NET] 301リダイレクト

windowsレンタルサーバを使用している際に、xxx.htmの301リダイレクトを行う方法の開発備忘録です。

やりたいことは、当初はxxx.htmをトップに据えていた。その後、xxx.aspxをトップに据えた。
そのため、xxx.htmにきたアクセスを301リダイレクトでxxx.aspxへ飛ばすというものです。

xxx.aspxならサーバ側でリダイレクトしてあげれば済みますが、htmファイルではそうできないので
どうしたらいいかという話です。

試して居ないのですが、gloval.asax内に書くこともできると思いますが、スマートでない気がするので、、、
また、web.configを書き換えて実行するには、HTTリダイレクト機能がサーバにインストールされて居ないといけません。
レンタルサーバでは、インストールされていない可能性が有りますので注意が必要です。
えっと、私の使用中のレンタルサーバもインストールされていないようです。

参考までに、Web.configを書き換える方法も載せますが、未検証です。
 HTTP リダイレクトは、IIS 7.0 の既定のインストールには含まれていません。インストールするには、次の手順を実行します
 参考URL:マイクロソフトライブラリ

   <system.webServer>
    <httpRedirect enabled="true" httpResponseStatus="Permanent">
      <add wildcard="xxx.htm" destination="xxx.aspx"/>
    </httpRedirect>
  </system.webServer>

私の環境ではweb.configの設定方法が使用できないので、
で、その他の方法をググりました。

xxx.htmを作成し対応する

<head>
<meta http-equiv="refresh" content="0; URL=http://seo.itsysgroup.com/index.aspx" />
<title></title>
</head>

302リダイレクトになっていますが、meta refreshの場合は、(一応)、0秒等で転送すると301に準じるように解釈されるようです。・・・そうでない場合もあるそうですが・・・、一応これで対応できているようです。。。

[ASP.NET] 2010 マスターページを使用した場合のTitle変更

ASP.NETの開発備忘録です。

ASP.NETでVisual studio 2010のVBを使用してます。
マスターページを利用した場合に、Titleを変更する場合、子供のページの以下の部分の先頭近くに有る「Title」タグに
値を入れます。

<%@ Page Title=”ここに入れる” Language=”vb” AutoEventWireup=”false” MasterPageFile=”~/seomaster.Master” CodeBehind=”seo-plan-index.aspx.vb” Inherits=”SEO.seo_plan_index” %>

なんてことの無いことなのですが、忘れがちなので。。。

[ASP.NET] Interop.ActiveDsの読込エラー

エラー対応の開発備忘録です。

[環境]
 windows7(32bit版)でVS2010を使用してWebアプリを開発。
 Windows Server 2003(64bit版)で稼働させる。

[現象]
 デバッグも終わり、サーバへリリースしたところ、下のエラーが発生。
  「ファイルまたはアセンブリ ‘Interop.ActiveDs’、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。」

[対応]
 まず、’Interop.ActiveDs’ってなんだっけ?から
 名前からして、ActiveDirectoryか?
 とりあえず、それらしいものを参照から外そうかと思いましたが、使用しているので。。。無理^^;

 で、ネット検索!
 さっぱりわからないのですが、どうやらWOW64が関係していそう。
 そこで、ターゲットCPUを64bitに変更してみることに。
 1)現在はAnyCPU
 2)▼をクリックして、「構成マネージャー」を表示
 3)Any CPU →x64に・・・・選択肢にない!?
 4)<新規作成..>を選択して作成することに。 設定のコピー元って?。。。
   わからなかったのでとりあえず<空>で
 5)OKをクリックして、Any CPU →x64に
 6)再コンパイル
 7)実行して動作を確認
 8)再度リリース!
 9)無事、動作を確認^^

結果、良くわからないままですが、なんとか動きましたとさ^^

[ASP.NET] FileUpload Web サーバー コントロールを使用してファイルをアップロードする

Webアプリケーションでファイルを取得するプログラムの備忘録です。

  1. FileUpload コントロールをページに追加します。
     セキュリティ上の理由から、ファイル名を FileUpload コントロールにあらかじめロードすることはできません。
  2. ページの Load イベントなどのイベントのハンドラでは、次の処理を行います。
    1. FileUpload コントロールがアップロードされたファイルを持つことを、その HasFile プロパティをテストすることで確認します。
    2. ファイルの名前または MIME の種類を確認し、受け入れるファイルをユーザーがアップロード済みであることを確認します。
        MIME の種類を確認するには、FileUpload コントロールの PostedFile プロパティとして公開されている HttpPostedFile オブジェクトを取得します。
        その後、ポストされたファイルの ContentType プロパティを確認することによって MIME の種類を取得できます。
    3. 指定した場所にファイルを保存します。
        HttpPostedFile オブジェクトの SaveAs メソッドを呼び出すことができます。
        または、HttpPostedFile オブジェクトの InputStream プロパティを使用してアップロードされたファイルをバイト配列またはストリームとして管理することもできます。

例)このコードではアップロードされたファイルの拡張子を、指定した拡張子リストと照らし合わせ、OKであれば保存処理へ進みます。
  保存は現在の Web サイトのUploadedImagesフォルダを指定しています。
  アップロードされたファイルは、クライアントコンピュータに存在していたときと同じ名前で保存されます。変更も可能です。
  HttpPostedFile オブジェクトのFileNameプロパティはファイルのクライアント コンピュータでの絶対パスを返すため、FileUpload コントロールのFileNameプロパティを使用します。

  また、クライアントから送信できるファイルの大きさは、既定サイズで4,096KB(4MB)です。
  この値は、MaxRequestLength値を変更することで変えられます。
    configSection.MaxRequestLength = 2048

  但し、MaxRequestLengthを超えたファイルを送った場合、ブラウザが真っ白になるかHTTPエラーになったはずです。。。
  なので、エラーや真っ白にしたくない場合、2Mまでとしたい場合は、余分に5M程度を設定しておき、一旦受け取った後PostedFile.ContentLengthでファイルサイズを確認し、
  2M以内なら保存、2Mを超えるようならエラーメッセージを出すなどのユーザインターフェースにした方が良いです。
  
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If IsPostBack Then

        Dim path As String = Server.MapPath(“~/UploadedImages/”)
        Dim fileOK As Boolean = False

        If FileUpload1.HasFile Then
            Dim fileExtension As String
            fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower()

            Dim allowedExtensions As String() = {“.jpg”, “.jpeg”, “.png”, “.gif”}
            For i As Integer = 0 To allowedExtensions.Length – 1
                If fileExtension = allowedExtensions(i) Then
                   fileOK = True
                End If
            Next

            If fileOK Then
                Try
                    FileUpload1.PostedFile.SaveAs(path & FileUpload1.FileName)
                    Label1.Text = “File uploaded!”
                Catch ex As Exception
                    Label1.Text = “File could not be uploaded.”
                End Try
            Else
                Label1.Text = “Cannot accept files of this type.”
            End If
        End If
    End If
End Sub

[ASP.NET] Windows7でIIS Webサーバを利用する

今までは、Windows7でVS2010を使用してWebアプリを開発していた時、他のPCから確認する際はテストサーバに発行してから他のPCで確認する方法を取っていました。
今回、開発PCに直接アクセスするケースが想定されたため、Windows7のIISを利用することしにました。
開発PCに発行するという手も有ったのですが、アクセスしてきたPCの情報確認を取りたかったため、デバッグができる方がよいと考え、そのようにしました。

そこで、Windows7でVS2010からIISをWebサーバにしてデバッグを行う設定を開発備忘録としてメモっておきます。
といっても、実は、途中メモを取らなかったので。。。。

とりあえず、確実にしたことは、
1)IISのインストール
〔コントロールパネル〕→
〔プログラムと機能〕→
〔Windows機能の有効化または無効化〕→
インターネットインフォメーションサービス
デフォルト以外でチェックした項目
・IIS6と互換性のある管理→IISメタベースおよびIIS6構成との互換性
・World Wide Web サービス→ Windows認証

2)Windowsファイアウォールの設定
〔コントロールパネル〕→
〔Windowsファイアウォール〕→
〔Windowsファイアウォールを介したプログラムまたは機能を許可する〕
設定画面が表示されるので、右上の設定の変更ボタンをクリック
一覧の中からWorld Wide Web サービス(HTTP)を探し、許可する
下段のOKボタンをクリック

以上で、他のPCからでもIISへアクセスできるようになり、デバッグも可能となります。

[ASP.NET] ASP.NETのセッションタイムアウトについて

ASP.NETのセッションタイムアウトについて

ASP.NETアプリケーションでは必要に応じて、実行時の状態(変数の値)を次回のポストバックの為にSessionプロパティに値を格納
していると思いますが、そのセッションのアイドル状態が何分続くと破棄するかを決めているのがセッションタイムアウトです。

セッションタイムアウトは以下のように指定することができます。

指定の仕方で優先が決まります。下位の設定は上位の設定で上書きされます。
単位は「分」です。

優先1:ページへの記述による設定
    影響範囲は、そのセッション中。ページ毎に上書きも可。もちろん上書き優先。
    aspxに記述        <% Session.Timeout = 120%>
    CodeBehind側に記述  Session.Timeout=120

優先2:global.asaxによる設定
    影響範囲:そのセッション
    Application_Startメソッドに記述
    ※Session_Startメソッド以降の記述は有効化どうか未検証。試した方教えてください。
    Session.Timeout=120

優先3:Web.configによる設定
    影響範囲:そのWebアプリケーション
    <sessionState mode=”InProc” timeout=”120″/>
    modeは、既定値はInProcですが、SQLServerやStateServerなど適宜変更して下さい。
    Offはセッション状態無効です。

優先4:Machine.Config
    影響範囲:マシン全体
 記述はWeb.configと同じ

※WebConfig及びMachine.configの既定の構成
 次の既定の <sessionState> 要素は、Machine.config ファイルまたはルートのWeb.configファイルでは明示的に構成されません。
 ただし、取得を行うと以下の値が返されます。すなわち既定の構成となっています。

 <sessionState
  mode=”InProc”
  stateConnectionString=”tcpip=127.0.0.1:42424″
  stateNetworkTimeout=”10″
  sqlConnectionString=”data source=127.0.0.1;Integrated Security=SSPI”
  sqlCommandTimeout=”30″
  customProvider=””
  cookieless=”UseCookies”
  cookieName=”ASP.NET_SessionId”
  timeout=”20″
  allowCustomSqlDatabase=”false”
  regenerateExpiredSessionId=”true”
  partitionResolverType=””
  useHostingIdentity=”true”>
  <providers>
    <clear />
  </providers>
 </sessionState>

 WebConfig及びMachine.configの既定値で「timeout=”20″ 」となっています。
 何も設定しないとセッションが20分で切れるのはこのためです。

※セッション timeout 構成設定は ASP.NET ページだけに適用されます。ASPページは影響しません。
※ちなみに、「Timeout プロパティを、525,600 分 (1 年) を超える値に設定することはできません。」だそうです。

[ASP.NET] NuGetにつて

NuGetについて

NuGetは、公開されているモジュールを簡単にダウンロード、インストールするパッケージ・マネージャ機能アプリケーションです。
少し言い換えるとNuGetは、「NuGet gallery」で公開されているソフトウェアやライブラリのパッケージを検索、インストール、更新、アンインストールなどを行うためのアプリケーションです。

例えば、公開されているWebアプリケーションを自分で作成しているWebアプリケーションに組み込みたい時に、公開されているWebアプリケーションをNuGetでインストールすると、他に作業を行うこと無く利用可能な環境にしてくれます。
手動でできるからNuGet利用しなくても良いというわけでなく、環境を適切にインストールし、参照パッケージに更新が有った場合も更新してくれるなど人が依るより確実に実施・管理してくれるのが特徴ですので、公開されているパッケージを利用したい場合は利用しない手はないです。

インストールや利用方法は、ネットで検索するといろいろ出てきますので、開発に携わってる方は覗くいて見ることをお勧めします。

[ASP.NET] DataTableに行を追加する

ASP.NETのDataTableに行を追加するプログラム備忘録です。

これは20行の欄を持つ帳票を作成する場合、レコード数が20未満でも20行になるようにレコードを追加し、空白行が出力されるようにするサンプルです。
データ取得をDataSetから取得し、そのDataTableに行を追加します。

‘データ取得
Dim oQA As New DataSet1Tableadapters.XXXXXTableAdapter
Dim oTbl As New DataSet1.XXXXXDataTable
oQA.Fill(oTbl)

’20行区切りになるまで追加する
Dim addNum As Integer
addNum = 20 – (oTbl.Count Mod 20)
Dim rowNum As Integer
For rowNum = 1 To addNum
  Dim oRow As DataSet1.XXXXXRow
  oRow = oTbl.NewRow
  ’ここに必要が有れば追加したレコードにデータをセットするようにする
  ’DataSetでキーやNotNullにしてあるとその項目にNullが入れられないので注意
  oTbl.Rows.Add(oRow)
Next

とりあえず、ここまで。