2022年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
無料ブログはココログ

ASP.NET2.0

ASP.NET JSONのデータ長

こんな感じでJSONデータを取得していたのですが 
$.ajax({
        url: "hoge.asmx/GetData",
        data: JSON.stringify(params),
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            endGridRequest("dtbl");
            var grdData = $("#tbl")[0];
            grdData.addJSONData(result.d);
        },
        error: function (result) {
            alert(result.responseText);
        }
  });

テスト環境では問題なく動作。
本番環境で「文字列の長さがmaxJsonLengthプロパティで設定されている値を超えています」とエラーが出て動かなくなってしまった。

Web.ConfigにmaxJsonLengthを設定して動作するようになりました。

<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="999999999" />
      </webServices>
    </scripting>
  </system.web.extensions>




ASP.NET Masterページのリンクについて

マスターページをルートフォルダに作成して利用する場合で、
一つ下の階層のフォルダからそのマスターページを参照した場合、
CSS、スクリプト、リンクのパスがおかしくなる場合があります。
ルートフォルダからの参照したパスと一つしたのフォルダからの参照で異なる場合など・・・

そういった場合、ResolveClientUrlを使うと自動的にパスを最適にしてくれます
■使用方法

ResolveClientUrl("~/folder/hoge.aspx")

「~」を使用してルートフォルダからのパスを記述すればOK

VS2005 ClickOnceアプリケーションにURLパラメータが渡らない!?

ClickOnceアプリケーション側でURLパラメータが取得できない場合にチェックすべきポイント。

メニューの「プロジェクト」→「プロパティ」→「発行」タブ→「オプション」の順にクリック。

「URLパラメータをアプリケーションに渡すことを許可する」にチェックがついているか確認すること。デフォルトではチェックがついていない。


Clickcheck


何回かClickOnceアプリを作っているのに、これがわかるまで半日を要したのでメモしておきます。

ASP.NET IE8とVS2005でデバッグができない

VS2005でブレイクポイントを入れても一向に止まる気配。
.NetFrameWork入れなおしてみたりしてみたりしても変わらない。

Googleで探してみると・・

IE8とVS2005でデバックをする方法を知っていますか?
http://techbank.jp/Community/blogs/nora/archive/2009/04/05/ie8-vs2005.aspx

上記サイトによると、
レジストリHKEY_LOCALMACHINE -> SOFTWARE -> Microsoft ->
Internet Explorer -> Mainに
文字列値「TabProcGrowth」を作成して値を「0」に設定すればOK


まさかデフォルトだとデバッグできないとは・・・

ASP.NET+VB6のActiveX作成のメモ

(VB6側)
1.プロジェクトを「ActiveXコントロール」で作成する

Projectsel











2.スクリプトの実行や初期化を行ってもそのコントロールが安全であること示すマークを付ける

[参考URL]
Visual Basic コントロールで IObjectSafety を実装する方法
http://support.microsoft.com/kb/182598/ja

上記ページでタイプ ライブラリを生成するコマンドを以下のようにします

×MKTYPLIB objsafe.odl /tlb objsafe.tlb
○MKTYPLIB objsafe.odl /nocpp objsafe.tlb

3.外部プロパティ

[例] 「p」というPublicプロパティ
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    Label1.Caption = PropBag.ReadProperty("p")
End Sub

4.標準以外のコントロールをプロジェクトに含める場合は「lpk_tool.exe」を使用してランタイムライセンスを取り込む
(※Windowsコモンコントロールもlpk_toolを使用する必要がある)

5.ディストリビューションウィザードの「インターネットパッケージ」でcabファイルを作成する

Internetpack











6.デジタル署名

ベリサイン社と契約する



(ASP.NET側)
1.objectタグでparamを指定するときは、heightとwidthを指定しないと表示されない
(おそらくheightとwidthがともに0になっているため)

※デジタル署名がない場合のIEの設定

「インターネットオプション」→「セキュリティ」タブ
 →「レベルのカスタマイズ」
  →「スクリプトを実行しても安全だとマークされてないActiveX
    コントロールの初期化とスクリプトの実行」
    ・IE7では「ダイアログを表示する」
     IE6では「ダイアログを表示する」or「有効にする」

ASP.NET Tableコントロール

今日はまったため、メモ。

Tableコントロールを使う場合、Page_LoadイベントではなくPage_Initイベントでテーブルを作成すること。

Page_Loadだとポストバック時にテーブルが消えてしまう。

3/21 追記
Page_Loadイベント内でIsPostBackで判断してもテーブルが消えてしまいます。

3/23 追記

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then
            Dim row As New TableRow
            Dim cell1 As New TableCell
            cell1.Controls.Add(New LiteralControl("テスト!"))
            row.Cells.Add(cell1)
            Me.Table1.Rows.Add(row)
        End If

    End Sub

Page_Loadだとボタンクリックなどでポストバックが発生するとテーブルが消えます。


Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim row As New TableRow
        Dim cell1 As New TableCell
        cell1.Controls.Add(New LiteralControl("テスト!"))
        row.Cells.Add(cell1)
        Me.Table1.Rows.Add(row)
    End Sub

Page_Initなら消えません。


※2013/2/21 追記

コメント欄にいただいた内容通り、上記内容は正しくありません。
Page_Init、Page_Loadイベント及び、
PostBackに関わらず毎回テーブル内容を作成しないと消えてしまう。

ASP.NET カレンダーコントロールのリンク領域を枠いっぱいにする

カレンダーコントロールで日付選択を行う場合、数字部分がリンクになっている。
カレンダーを大きく表示すると数字部分だけでなく、枠全体をリンクにしたい場合がある。
スタイルシートを使用すればリンク枠を大きくすることができる。

[サンプル(.aspx部分)]

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
        <asp:Calendar ID="Calendar1" runat="server" Height="456px" Width="582px" ShowGridLines="True" >
            <DayStyle VerticalAlign="Top" CssClass="hoge" Height="50px" />
        </asp:Calendar>
    </form>
</body>
</html>


[スタイルシート]

.hoge
{
background-color : #C1CDCD;
}
.hoge a
{
display : block;
width   : 100%;
height  : 100%;

}
.hoge a:hover
{
background-color : #FFCCCC;
}

太字になっている部分が重要部分。
特にカレンダーコントロールのDayStyleのHeightプロパティを指定しないと枠全体とならないので注意。

Calender

ASP.NET 大量データをやりとりする場合

ASP.NETではファイルのアップロード、ダウンロードの最大サイズが4Mに制限されています。実際には、ファイル以外のメッセージのやり取りも含まれるため、4M未満のファイルサイズでもアウトになるケースがあります。

最大サイズを変えるには、Web.configのmaxRequestLengthの設定を変更します。

[例] 最大サイズを8Mに設定します。(数値はバイト単位で設定)

<configuration>
   <system.web>
      <httpRuntime maxRequestLength="8096" />
    </system.web>
</configuration>

ASP.NET バッチファイルの実行

[ASP.NETのソース]

protected void Button1_Click(object sender, EventArgs e)
{
    // ボタンクリック時にバッチファイル実行
    Process process = Process.Start(@"c:\temp\aaa.bat");
    process.WaitForExit();
}

[Windows2003(サーバー)側の設定]

1.バッチファイルの権限にASP.NETの実行アカウントの「Network Service」を追加し、フルコントロールにしておく。

2.「C:\WINDOWS\system32\cmd.exe」権限に「ASP.NET」を追加し、フルコントロールにしておく。
(ここはなぜか「ASP.NET」アカウント)

ASP.NET セッションタイムアウト 解決

http://tukaenai-pg.cocolog-nifty.com/blog/2006/09/aspnet20__7be6.html
のセッションタイムアウトが20分から変わらない現象が解決した。

Web.configの設定でフォーム認証部分のタイムアウトが30分に設定されていた。
(なにも設定しないとデフォルトは30分ぽい)
これを変更したら解決した。