2013年12月18日水曜日

【ASP.NET WebForms】別のページにポストするFormの作成

通常のhttp通信はブラウザからのRequestとサーバからのResponseで成り立っています。
ASP.NET WebForms では、自ページにポストし(PostBack)受け取ったデータを処理して、必要があれば別のページに遷移するというのが基本的な設計になっています。

別ページに直接ポストするのが結構困難で、runat="server"のformはページ内に1つしか記述できないとか、runat="server"でないformを記述したとしてもASP.NETが自動で吐き出すformと入れ子になってしまって上手く挙動しないなどのトラブルにみまわれます。

自サイト内だけで処理が完結するのであれば、PostBackを基本とした設計にするなどの解決方法も取れるかもしれませんが、他サイトとの連携などが絡むと何らかの手段を講じる必要があります。


1つにはSystem.Net.WebClientクラスやSystem.Net.WebRequestクラスを利用して他サイトと通信する方法があります。
この場合Responseがサーバに返ってきますので、サーバでその後の処理を行ってあげる必要があります。
URLも上図サーバAのURLとなります。


BtoBなんかでもありますが、データを直接他サーバにポストしてしまって、その後の処理も他サーバに預けてしまいたいという要件の場合があります。
ASP.NET MVC 等であれば、出力されるhtmlは細かくハンドリングできるので他サーバに直接ポストするhtmlを記述することができます。(セキュリティの問題などをクリアする必要はあるかと思いますが)
前述のようにASP.NET WebFormsでは自動で出力されるhtmlが邪魔で少しテクニックが必要です。

ここではjavascriptを使って直接ポストする方法をご紹介します。
以下のようなコードをボタンClickイベントなどに記述いたします。


        //javascriptで自動でポストされるhtmlフォームを作成する
        StringBuilder html = new StringBuilder();
        html.AppendLine("<html>");
        html.AppendLine(@"<body onload='document.forms[""formid""].submit()'>");
        html.AppendLine(String.Format("<form action='{0}' id='formid' method='POST'>", ServerBUrl));
        html.AppendLine(String.Format("<input name='name1' type='hidden' value='{0}' />", somethingValue));
        html.AppendLine("</form>");
        html.AppendLine("</body>");
        html.AppendLine("</html>");
        
        //作成したhtmlフォームをResponseとして返す
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Write(html.ToString());
        HttpContext.Current.Response.End();


以上メモまで。

2013年12月8日日曜日

【PC環境】コタツ、座椅子、ワイヤレスキーボード、ワイヤレストラックボールマウスの組み合わせが最高!

普段PCを利用するのは書斎の普通の机と椅子の環境ですが、
家族で使うリビングのPCはコタツでTVをモニターがわりにしています。
今まではクッションに座って使ってましたが、前屈みになるので腰に負担がかかり
もう少し良い環境にならないかなーと思っていました。

そして購入したのがこれ「KUMO(和楽の雲)」という座椅子です。


タイプはKUMO上、PU(ポリウレタン)のブラウンです。



おっと、失礼

早速コタツにセットしてみます。


私の身長は174cm、体重は68kgです。
普通に腰掛ける 浅めに腰掛ける 深めに腰掛ける
ご覧の通り深めに腰掛けた時は首を支えることはできません。
浅めに座った時に腰が痛くなるという意見もあるそうですが、
私は気になりませんし、クッションを入れるなどして軽減できると思います。



さて、コタツに座椅子という快適な組み合わせが整いましたが、
この通り卓上のキーボードやマウスの操作が不便です。


・・・


ここで活躍するのがワイヤレスキーボードとマウスです。
特にマウスはトラックボールマウス(M570)がオススメです。


このように膝の上でマウスもキーボードも操作可能です。


これからの寒い冬コタツで快適生活!

2013年12月4日水曜日

【LINQ to XML】名前空間の記述でエラー

LINQ to XML でXMLを操作する際に
「System.Xml.XmlException: ':' 文字、16 進数値 0x3A を名前に含むことはできません。」
というエラーが吐出されて困ったのでメモ。

エラーになったのは以下のようなコード(C#)

var xml = new XElement("Root", "Root Value", 
              new XAttribute("xml:lang","ja"));

コードとエラーを見て頂ければ分かると思いますが、
「:」を属性名で使ってはいけないということです。
(要素名にも使ってはいけません)
 「xml:lang」の「xml」の部分は名前空間として記述しなくてはなりません。

以下が修正したコードです。

var xml = new XElement("Root", "Root Value", 
              new XAttribute(XNamespace.Xml + "lang","ja"));

これで以下のようなXMLが作成されます
Root Value 


(参考)
XNamespaceクラス
http://msdn.microsoft.com/ja-jp/library/system.xml.linq.xnamespace(v=vs.110).aspx

2013年11月27日水曜日

docxのバイナリヘッダで疑問

ブラウザからポストされたファイル(docx)の形式をバイナリヘッダでチェックするシステムを扱っているのですが、
ユーザから「ファイルを送信できない」という問い合わせがありました。


通常docxファイルのバイナリヘッダは

50 4B 03 04 14 00 06 00


一方、ユーザから送られてきたファイルのバイナリヘッダは

50 4B 03 04 14 00 08 00


(参考)http://www.garykessler.net/library/file_sigs.html

このためチェックに引っかかって送信することができなかったのですが、
このユーザから送られてきたファイルは確かにWord文書として開くことができるのです。
上記「参考」のページを見るとユーザのファイルはjarファイルみたいですが・・・。
docxはzip圧縮、jar圧縮どちらも取り扱えるということなのでしょうか?

ファイル作成環境などは都合でこれ以上ユーザに突っ込んだ質問出来ないので不明です・・・。

2013年11月26日火曜日

秀丸でバイナリを確認する方法

「その他」→「コマンド一覧」→「ファイル系」→「バイナリモード」

以上メモまで。

2013年11月18日月曜日

【ASP.NET WebForms】aspxファイルとclassファイルの名前衝突

今さらな内容ですが、ASP.NET WebForms で開発する時にaspxファイルとクラスファイルのクラス名が衝突するとエラーになります。
名前空間が違えば衝突は起こりません。
(当然といえば当然ですが)


ただし、どこかでそのクラス(画像では「Sample」)を呼びださなければ、ビルドは通ります。
呼び出すと以下のようなエラーが出ます。



型 'Sample' は 'c:\Users\xxxxxx\AppData\Local\Temp\Temporary ASP.NET Files\root\d4b956ac\5fcc836a\App_Web_rnnubpny.dll' および 'c:\Users\xxxxxx\AppData\Local\Temp\Temporary ASP.NET Files\root\d4b956ac\5fcc836a\App_Code.zs4dnvnx.dll の両方に存在します。
意外とやってしまいがちなミスなので気をつけましょう。
と、自分に言い聞かせるメモ。

2013年10月19日土曜日

【Entity Framework】同時実行制御(楽観ロック)を行う (Edit画面にhiddenを追加する)

Entity Framework で同時実行制御を行うにはTimestamp属性をつけるだけでEFが勝手にやってくれます。
(Timestamp属性をつけておけば、ConcurrencyCheckはいらない・・・たぶん)

HogeEntity.cs
public class HogeEntity
    {
        public int HogeEntityId { get; set; }
        public string Name { get; set; }
        public string Value { get; set; }

        [Timestamp]
        [ConcurrencyCheck]
        public byte[] Timestamp { get; set; }
    }


Scaffoldingでコントローラーとビューを作った時はEdit画面にHiddenフィールドを追加してあげないとエラーになります。

Edit.cshtml
@Html.HiddenFor(model => model.Timestamp)

2013年9月10日火曜日

【ASP.NET Webforms】UpdatePanel上でJavaScriptを動かす

ASP.NET WebForms でサーバーサイドで生成したJavaScriptを走らせるには
ClientScript クラスの ClientScript.RegisterStartupScript メソッドなどを利用します。

が、UpdatePanel と一緒だと上記では動作しません。

ScriptManager クラスの ScriptManager.RegisterStartupScript メソッドなどを利用します。

以上、メモまで。

2013年9月7日土曜日

【Visual Studio】 Git Source Control Provider で Webサイトプロジェクトにリポジトリ作成

Visual Studio で新規にWebアプリケーションを作成する時に
「新しいプロジェクト」と「新しいWebサイト」の2種類があります。

その詳細な説明は他に譲るとして
【msdn】
Visual Studio での Web アプリケーション プロジェクトと Web サイト プロジェクト
http://msdn.microsoft.com/ja-jp/library/dd547590.aspx 

【どっとねっとふぁん】様
WebアプリケーションプロジェクトとWebサイトプロジェクト
http://blogonos.wordpress.com/2008/01/21/


ファイル・ディレクトリ構成は以下のとおりです(デフォルト)。

「新しいプロジェクト」の場合は
 ソリューションファイル
 C:\Users\<ユーザ名>\Documents\Visual Studio 2012\Projects\hoge\hoge.sln
 コーディングしたファイル
 C:\Users\<ユーザ名>\Documents\Visual Studio 2012\Projects\hoge\hoge

「新しいWebサイト」の場合は
 ソリューションファイルは
 C:\Users\<ユーザ名>\Documents\Visual Studio 2012\Projects\hoge\hoge.sln
 コーディングしたファイルは
 C:\Users\<ユーザ名>\Documents\Visual Studio 2012\WebSites\hoge


Webサイトプロジェクトの場合、ソリューションファイルと本体のファイルとで
ディレクトリ構成が異なってしまうのですが、Git Source Control Provider を使って
VSからリポジトリを作成しようとすると、ソリューションファイルのあるディレクトリに
「.git」ディレクトリが作成され、本体のファイルをgitで管理できません。

Git Bash や Tortoise Git など Visual Studio 以外から先にリポジトリを作成しておけば
Visual Studio 上で Git Source Control Provider で管理できるようになります。

以上メモまで。
(Gitを使い始めたばかりなので認識に誤りがあればご指摘頂けますと幸いです)

2013年8月10日土曜日

Panasonic GORILLA CN-GL320D エアコン送風口取り付け

トヨタファンカーゴのエアコン送風口にポータブルカーナビを取り付ける方法を紹介いたします。
(※メーカーの推奨する使用法ではないため参考にされる際は自己責任でお願いします)

ポータブルナビはオンボードで利用することが多いと思いますが、
センターメーターの車(写真はトヨタファンカーゴ)の場合取り付け場所に悩むのではないでしょうか。


いくつか方法があると思いますが、エアコンの送風口を利用することが可能です。

[使用する製品]
・Panasonic GORILLA CN-GL320D の付属品であるゴリラ用車載用吸盤スタンド CA-PTQ50D

・セイワ CITY ROAD エアコンテレビスタンド2 P118

(ファンカーゴのような縦型ルーバーへの取り付けも可能)


まず、CA-PTQ50Dを分解します。


カーナビホルダー部分と台座を外したいのですがピンを抜く必要があります。
(これに気づかなくて苦労しました・・・)
使用するのはカーナビホルダー部分です。

エアコンテレビスタンド2 P118の方も分解し、液晶テレビモニターのホルダー部分以外を使用します。



最終的に使用するのは以下の3つの部品です。


このCA-PTQ50Dのカーナビホルダー部分とエアコンテレビスタンド2 P118のネジ部分が
たまたま上手く合うので固定します。
(ちょっと結合が甘い気がしますが、そこは様子見です)


実際にファンカーゴに取り付けると以下のようになります。

Panasonic GORILLA CN-GL320D パーキングブレーキ解除プラグ

先日ポータブルカーナビを購入しました。
Panasonic GORILLA CN-GL320D



サイドブレーキを引いてないと操作できないタイプのカーナビなのですが、
走行中でも助手席の同乗者が操作したいということはよくあると思います。

サイドブレーキを引いてるかどうか検知するセンサーはカーナビの側面についており、
ここをショートさせることで解除できます。
イヤホンジャックより一回りほど小さいジャックとなっており、ネットではネジや
ピンを刺すことでショートさせている人もいるようですが、私は市販されている
解除用のプラグを利用しました。

Amazonなどで「GORILLA パーキングブレーキ解除プラグ」と検索すると出てきます。


プラグを挿入したところが下の写真です。


2013年4月7日日曜日

Becky で指定した日時に送信するには

リマインダを使えばOKです。
ちょいちょい忘れるのでメモ。


Visual Studio 2012 の 「ASP.NET 構成」ってどこ?

前まではソリューションエクスプローラーの上にあったのですが、Visual Studio 2012からは
メニューバーの「プロジェクト」の下の方にあります。

結構探したので、メモ。


2013年4月5日金曜日

MVC Music Store で Edit ができない

ASP.NET MVC のサンプルアプリケーションとして紹介されている
「MVC Music Store」ですが、現在ASP.NET MVC3に対応したバージョン3が公開されております。

【ASP.NET】MVC Music Store Tutorial
http://www.asp.net/mvc/tutorials/mvc-music-store

【CodePlex】MVC Music Store
http://mvcmusicstore.codeplex.com/

ただし、チュートリアル通りに進めていくと、管理画面のEditのところで、
OptimisticConcurrencyExceptionが発生しエラーとなってしまいます。


原因は Album Model が AlbumId をバインドしないようになっているからです。

Album.cs
namespace MvcMusicStore.Models
{
    [Bind(Exclude = "AlbumId")]  //←ココ
    public class Album
    {
        [ScaffoldColumn(false)]
        public int AlbumId { get; set; }

        [DisplayName("Genre")]
        public int GenreId { get; set; }
...


解決するには、この部分を消してしまうか、
Album.cs
namespace MvcMusicStore.Models
{
    //[Bind(Exclude = "AlbumId")]
    public class Album
    {
        [ScaffoldColumn(false)]
        public int AlbumId { get; set; }

        [DisplayName("Genre")]
        public int GenreId { get; set; }
...

コントローラー側で別途バインドしてやる必要があります。
StoreManagerController.cs
namespace MvcMusicStore.Models
{
    [Authorize(Roles = "Administrator")]
    public class StoreManagerController : Controller
    {
        ...

        //
        // POST: /StoreManager/Edit/5

        [HttpPost]
        public ActionResult Edit(Album album, int id)
        {
            if (ModelState.IsValid)
            {
                album.AlbumId = id;  //←ココ
                db.Entry(album).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
            ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
            return View(album);
        }

        ...


【参考】
http://mvcmusicstore.codeplex.com/workitem/6648

2013年3月29日金曜日

Windows 2008 Server に VIsual Studio 2012 がインストールできない

R2ならインストールできるみたいですが・・・。
詳細は以下のリンクです。
(なぜかFireFoxでページがRuntime Errorになってしまうので、
キャプチャ画像を掲載。引用方法に問題あればご指摘頂けますと幸いです。)

【Microsoft】開発ツール対応OS一覧
http://www.microsoft.com/ja-jp/dev/support/tools.aspx

2013年3月22日金曜日

軽い気持ちでADに手を出して酷い目にあった・・・

Microsoft Project を試したいということでテストする環境を構築することになりました。

マシンA(Windows 7)上にVMで
・Windows Server 2012
・SQL Server 2012
・SharePoint Foundation 2013
をインストールしたところ、Active Directory(AD)への参加が必要と言われました。

ので、マシンB(Windows Server 2008 自分の開発用マシン)をドメインコントローラー(DC)にして、ADを立ち上げることにしました。
すると以下と同様か分かりませんが、SQL Serverが動作しなくなりました。
(またセキュリティ上、DCにするマシンにはSQL Serverは立ち上げない方が良いらしいです。)

【MS フォーラム】
SQL Serverをインストール済のマシンにActive Directoryを入れたところ、SQL Serverが起動できなくなった
http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/11a6d11b-5bb0-4288-a395-89c17d94cb4c


これはいかんと、ADを削除(DCの降格)したところ、別途ユーザプロファイルが作成され、元のアカウントにログインすることができなくなりました。

【ASCII.JP】
Windows Serverで学ぶサーバOS入門 ― 第18回
削除方法も知っておこう! ドメインコントローラ追加によるトラブルへの対策
http://ascii.jp/elem/000/000/522/522595/index-3.html

4.ローカル管理者のアカウント情報を指定
ローカルで利用するAdministratorのパスワードを入力する。ドメインコントローラ昇格以前のアカウント情報が復活することはない


SQL Serverは未だ立ちあげられず・・・。
事前調査は入念にやっておけということですね。

ORZ

2013年3月8日金曜日

2013年2月25日月曜日

検索したくないサイト

Googleなどで検索をしていると、海外のサイトを自動翻訳しただけのサイトやただのリンク集のサイトが検索されてイライラすることがあります。

以下のサイトで検索結果からブロックする方法が紹介されています。

【lifehacker.jp】
二度と見たくないサイトをGoogleの検索結果に表示させない方法

方法は「http://www.google.com/reviews/t」からサイトのURLを登録するだけ。

もっと早く知りたかったです(T_T)

(追記2013/2/27)
今のところあまり効果が見られないかも…?

2013年2月7日木曜日

Visio 2010 ステンシル一覧

Visio 2007 ステンシル一覧」で愚痴っていた部分一致検索にはVisio 2010 も対応していないようです。
ということで、今回もキャプりました。
何だかアイコンがカッコ良くなった・・・ような気がしないでもない。

(もう巷では2013が出てるとか出てないとか・・・。)