2011年3月6日日曜日

Validationを使用した時の背景色を手動で設定する

asp.net でValidationを使用して、入力エラー時に背景色を設定する時、
フォーカスが離れたときにまで、自動で背景色がついたりしてどうも使い勝手が良くない。

という事で、Validationを使用しつつも、背景色を手動で設定する方法をご紹介。

結論から言えば、ValidationSummaryOnSubmitというファンクションを定義して、この中で書き換えるのである。
このファンクションは、ajaxで定義されているファンクションで、
必要な部分は、そのままカスタマイズしたい部分を追加するのである。
それではまず、ValidationSummaryOnSubmitファンクションの中身を見てみよう。
function ValidationSummaryOnSubmit(validationGroup) {
    if (typeof(Page_ValidationSummaries) == "undefined")
        return;
    
    var summary, sums, s;
    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";
        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
            var i;
            if (summary.showsummary != "False") {
                summary.style.display = "";
                if (typeof(summary.displaymode) != "string") {
                    summary.displaymode = "BulletList";
                }
                switch (summary.displaymode) {
                    case "List":
                        headerSep = "<br>";
                        first = "";
                        pre = "";
                        post = "<br>";
                        end = "";
                        break;
                    case "BulletList":
                    default:
                        headerSep = "";
                        first = "<ul>";
                        pre = "<li>";
                        post = "</li>";
                        end = "</ul>";
                        break;
                    case "SingleParagraph":
                        headerSep = " ";
                        first = "";
                        pre = "";
                        post = " ";
                        end = "<br>";
                        break;
                }
                s = "";
                if (typeof(summary.headertext) == "string") {
                    s += summary.headertext + headerSep;
                }
                s += first;
                for (i=0; i<Page_Validators.length; i++) {
                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
                        s += pre + Page_Validators[i].errormessage + post;
                    }
                }
                s += end;
                summary.innerHTML = s;
                window.scrollTo(0,0);
            }
            if (summary.showmessagebox == "True") {
                s = "";
                if (typeof(summary.headertext) == "string") {
                    s += summary.headertext + "\r\n";
                }
                
                var lastValIndex = Page_Validators.length - 1;
                for (i=0; i<=lastValIndex; i++) {
                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
                        switch (summary.displaymode) {
                            case "List":
                                s += Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += Page_Validators[i].errormessage + " ";
                                break;
                        }
                    }
                }
                
                alert(s);
            }
        }
    }
}

バリデーションから自動生成されるソースからこのファンクションが呼び出しされる。

このファンクションの以下のif分の中に背景色の変更処理を追加する事で、手動で設定可能である。
if (summary.showmessagebox == "True") {

たいてい場合、共通のjsファイルを作成するだろうからその中にこのファンクションを追加すると各画面では、意識しなくてすむ。

VirtualBoxのネットワーク設定

VirtualBoxのネットワーク設定では、以下の5つの種類のネットワークが選択出来る。

・未割り当て
・NAT
・ブリッジアダプタ
・内部ネットワーク
・ホストオンリーアダプタ





















少し戸惑ったので、忘れないようにメモ。

■未割り当て
名前の通り。NICが接続されていない状態。

■NAT
外部ネットワーク(インターネット)への接続が可能。
但し、ゲストOS同士やホストOSへの接続は出来ない。

■ブリッジアダプタ
これが一番分かりやすく、ホストOS、内部ネットワーク、外部ネットワークへ接続可能。

■内部ネットワーク
ゲストOSが2台以上ある場合、ゲストOSの通信が可能。

■ホストオンリーアダプタ
ホストOSとゲストOSで接続可能。



まとめ
ホストOS上にゲストOSを2台設定した場合、ゲストOS1から接続可能なネットワーク。
 ゲストOS2ホストOS内部ネットワーク外部ネットワーク
NAT×××
ブリッジアダプタ
内部ネットワーク×××
ホストオンリーアダプタ×××

簡単に済ませたいのであればブリッジアダプタを設定で良い。
外部からの接続を遮断したい場合は、ホストオンリーアダプタ + 内部ネットワークの組み合わせ等で対応可能である。

VirtualBox4.04で確認。

2011年2月22日火曜日

ローカルフォルダをネットワークドライブに

以下の方法で、ローカルフォルダをネットワークドライブとして割り当てることが可能です。

subst s: D:\src

ただし、再起動しておくと消えるようなので、スタートアップへの登録等が必要になってきます。

2011年2月15日火曜日

App_Code の参照

asp.net でユーザコントロールや各ページのベースとなるページを作成しようとすると
App_Code 配下にクラスを作成してやる必要がある。

しかし、画面側からの参照方法が分からない・・・・
調べた結果以下のようにするとうまくいく。


■App_Code\UserTextBox.cs
namespace aaa.bbb.ccc
{
    public class UserTextBox : System.Web.UI.WebControls.TextBox
    {
        public UserTextBox()
        {
        }
    }
}

■Default.aspx
<%@ Register TagPrefix="con" Namespace="aaa.bbb.ccc" Assembly="__code" %>
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"></head>
<body>
    <form id="form1" runat="server">
    <div>
        <con:UserTextBox runat="server" ID="UserTextBox" />
    </div>
    </form>
</body>
</html>

Assembly="__code" ってなんなんだ・・・・

フォルダの一括コピー

フォルダの一括コピーなんかにバッチファイルを作成して、
タスクに登録しておくと自動的にフォルダをバックアップする事が出来る。

C:\src

C:\backup\YYYYMMDD1200
とフォルダをコピー。

xcopy /S /E /F /G /H /R /K /Y C:\src C:\backup\%date:~0,4%%date:~5,2%%date:~8,2%1200\

うーん、フォルダがあればどうなるのだろう???
削除して・・・なんて機能もいるのかな。