タグ: ASP.NET

  • ASP.NET(VB)でテキストボックスでEnterキーを押したときに何も動作させたくないのにImangeボタンのクリック処理が動作してしまう

    ASP.NET(VB)でウェブアプリを作るとき、テキストボックス上で、Enterキーを押したとき、ImangeボタンがEnterキーによって動作してしまう。Enterキーを押したときに、Submitやボタン動作を行わせたくないときの小技。

    あまり賢い小技ではないのだが、上部にダミーのなんのアクションも割り当てていないImageボタンを設置し、ボタンに割り当てるイメージ画像を1ピクセルの画像を割り当てる。これにより、テキストボックス上で、Enterキーを押しても、このダミーのイメージボタンがクリックされたようになる。これでユーザの邪魔にはならなくなる。

    <asp:ImageButton ID="ib_DummyForSubmit" runat="server" ImageUrl="~/img/space.gif" TabIndex="1" />

    もし、Enterキーを押したときに、実行させたいボタンがあるのであれば、Me.Form.DefaultButton に、ボタンのUniqueIDを指定する。

  • ASP.NET(VB)でEnterキーを押したときのデフォルトボタンを指定する

    Page_Loadで、Me.Form.DefaultButtonを指定することで、Enterキーを押したときに動作するデフォルトボタンを指定できる。指定は、動作させるコントロールのユニークIDを指定する。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Enterキーを押したときにイメージボタンがクリックされるのを防ぐ 
        Me.Form.DefaultButton = Me.bt_Submit.UniqueID
    End Sub
  • ASP.NETで「Web.HttpRequest.GetEntireRawContent()」のエラーが発生

    ASP.NETのアプリで、アプリケーションがクラッシュした。出力しているログをみても、下記のような程度しかエラーが出ていない。コーディングしたところとは無関係なエラーが出力されてきた。

    2023-02-XX 10:mm:ss,sss ERROR :  - Global_asax.Application_Error[xx] :    場所 System.Web.HttpRequest.GetEntireRawContent() 
       場所 System.Web.HttpRequest.GetMultipartContent() 
       場所 System.Web.HttpRequest.FillInFormCollection() 
       場所 System.Web.HttpRequest.EnsureForm() 
       場所 System.Web.HttpRequest.get_Form() 
       場所 System.Web.HttpRequest.get_HasForm() 
       場所 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 
       場所 System.Web.UI.Page.DeterminePostBackMode() 
       場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

    調べたところ、ファイルのアップロードで発生しており、「Web.HttpRequest.GetEntireRawContent()」のところで、POSTされてきた要求のサイズが大きすぎて、クラッシュしていることがわかった。

    調べてみると、IISの設定では、デフォルトでPOSTサイズは30MBまで。ASP.NETでは、デフォルトで4MBまで、だった。アップロードのファイルサイズが数メガあり、POSTサイズを超えたのが原因だった。

    対応としては、アップロードするファイルサイズを制限するか、ASP.NETの設定(web.config)を変えて、もっと大きいファイルサイズをアップロードできるようにするか、だ。

  • Web.configでASP.NETのPOSTサイズを設定する

    ASP.NETのアプリには、デフォルトの場合、POSTできるサイズが4MBに制限されている。POSTの制限なので、ファイルのアップロードをPOSTで行う場合も、このデフォルトの4MBの制限にかかる。(なお、IISのデフォルトは30MB)

    大きなファイルをアップロードするためには、Web.configに次の設定を行う。

    system.webセクションに、`<httpRuntime maxRequestLength=”サイズ指定” />` を追加し、サイズを指定する。単位はKbyteなので注意。

    system.webServerセクションに、` <requestLimits maxAllowedContentLength=”サイズ指定”/>` を追加し、サイズを指定する。単位はByteなので注意。

    今回指定しているのは、POSTなどでリクエストされるサイズなので、厳密のはアップロードされるファイルのサイズではない。他にも情報を送る場合には、MAXのファイルサイズ+送信データ量にする必要があるので注意。厳密に指定しなくてもよければ、大き目のサイズを指定しておくのがよい。

    web.configの設定例)

      <system.web> 
        <httpRuntime maxRequestLength="20480" /><!--20MB 単位はKbyte--> 
      </system.web> 
      <system.webServer> 
        <security> 
          <requestFiltering> 
            <requestLimits maxAllowedContentLength="20971520"/><!--20MB 単位はByte--> 
          </requestFiltering> 
        </security> 
      </system.webServer>

    参考:

    https://zukucode.com/2018/06/aspnet-upload-size.html

    ※参考にしたところは、微妙にWeb.configの設定ミスがあるので注意。

  • asp.netのコントロールのカラーをVBから変えようとしたらエラーに。

    コントロールのプロパティでは、カラー名や値で指定できるのに、VBで、そのまま書くとコンパイルエラーになる。VBやC#などのコードで、指定する場合は、「System.Drawing.Color」を使って、色を指定する必要がある。

    エラーになった記述

    xxxxxxxx.ForeColor = "#FF0000" 
    xxxxxxxx.ForeColor = "Red"

    正常にコンパイルもでき、動作する記述

    ' 色名で指定する場合 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromName("Red") 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromName("Black") 
    ' 数値で指定する場合 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromArgb(0, 255, 0)

    参考 https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.color.fromargb?view=net-6.0

  • 「.NET Framework 4.8.1」が出た

    .NET Framework 4.8系の最新バージョンである「.NET Framework 4.8.1」が出た。

    Announcing .NET Framework 4.8.1
    https://devblogs.microsoft.com/dotnet/announcing-dotnet-framework-481/

    これ、Windows10/11とWindows Server 2022が対象なので、Windows Server 2019が対象外。開発ツールのVisual Studioも、Visual Studio 2022になる。

    Windows Server 2019で .NET Framework 4.8.1 が使えないのが、セキュリティなど面できになるところだ。4.8.1にしたら、今のところ、Windows Server 2019で使えないし、難しい。

  • ASP.NETでChrome対応したらJSでテキストボックスに値が入らなくなったときの対応

    IE用に作られたASP.NETのアプリを、Chrome対応(Chromium Edge対応)しているときに、JavaScriptでASP.NETのパーツのテキストボックス(type=text)に値をいれたところ、値が入らないということがおきた。「getElementById(“ID”).value」に、JavaScriptから値をいれたが、IE11では問題ないのに、Chromeだと値が入らなかった。

    document.getElementById("ID").value = "値";
    // ↑これだと、IE11は値が入るが、Chromeだと入らない。

    PostBackは発生させていない処理なのだが。いろいろと調べていき、Chromeの場合は「.defaultValue」を使って初期状態の値を書き換えれば、画面の表示が変わることを確認できた。

    document.getElementById("ID").defaultValue = "値";
    // ↑Chromeの場合は、defaultValueを書き換える。

    IE11も残しておく必要があったので、ブラウザの種類をみて、IF文でIEとそれ以外で分岐させるようにした。

    サンプル。

        // ブラウザを取得する
        var userAgent = window.navigator.userAgent.toLowerCase();
        if (userAgent.indexOf('msie') != -1) {
            // IEのときの処理を書く
            document.getElementById("ID").value = "aaaa";
        } else {
            // IE以外の処理。ChromeやChromium Edgeの想定
            // document.getElementById.value だと、画面上の表示が変わらないことがわかった。
            // そのため、document.getElementById.defaultValue に変更したところ、うまくいった。
            document.getElementById("ID").defaultValue = "aaaa";
        }
  • Visual Studio 2019と Visual Studio 2022は共存できる。

    Windows10のPCで、Visual Studio 2019と Visual Studio 2022は共存できる。同時に起動も可能。

    ちなみに、Visual Studio 2022で「ASP.NET とWeb開発」を選んだだけで、インストールに必要なサイズが6.39GB。非常にサイズがでかい。

  • IISで .NET5のアプリケーションが動作するように設定する

    Windows Server 2019のIISで .NET5 (ASP.NET core)のアプリケーションが動作するように設定したので、そのメモ。

    設定手順

    1. 下記の .NETのダウンロードページにアクセスする。
    https://dotnet.microsoft.com/download/dotnet

    2. 「.NET 5.0」のリンクをクリックする。

    3. 「ASP.NET Core Runtime 5.0.x」のWindowsの「Hosting Bundle」をクリックする。インストーラーのダウンロードが始まる。「Hosting Bundle」には、IISのサポートが含まれるので、IISで動作させる場合には、これを選択する必要がある。

    4. ダウンロードしたファイル(dotnet-hosting-5.0.9-win.exe)を実行して、インストールする。

    5. IISのサービスを再起動する(Windowsなので、OSごと再起動できるのならば、OS再起動の方が安全)。

    6. IISマネージャーを開く

    7. アプリケーションプールを開いて、「アプリケーションプールの追加」をクリックする。

    8. 「名前」はわかりやすければ、なんでもよい。「.Net CLR バージョン」は「マネージドコードなし」を選択。「マネージド パイプラインモード」は「統合」を選択する。「OK」をクリックして作成する。

    9. ASP.NET coreのアプリを発行し、サーバ上に配置する。

    10. IISマネージャーで、サイトからアプリケーションを追加するWebサイトを選択する。(Webサイトがない場合は追加する)

    11. 右クリックから「アプリケーションの追加」を選択する。

    12. 「エイリアス」を入力し、「物理パス」に発行したアプリケーションのフォルダを選択する。「アプリケーションプール」のところにある「選択」をクリックし、一覧の中から追加したアプリケーションプールの名前を選択する。

    13. 「OK」をクリックして、追加する。

    14. ブラウザでアクセスして、動作を確認する。

    以上で設定は終わり。

  • 「assenbly.csが見つからない」とエラーになる

    古いASP.NETのプロジェクト(言語はVB)をVisual Studio 2019で開いて、デバック実行したところ、「assenbly.csが見つからない」とエラーになる。

    これを回避するには、以下の設定を行う。

    1. 上部メニューから「デバッグ」を選択する
    2. 「オプション」を選択する
    3. (デバッグの全般で)「マイコードのみを有効にする」にチェックを入れて、OKで閉じる

    もう一度、デバック実行して、「assenbly.csが見つからない」が出なければ問題なし。