クールなスマートフォン向けWebアプリケーションを作るなら「jQuery Mobile」かも?

jQueryは前からかなり便利に利用させていただいている。
jQueryを使うようになってからJavaScriptの見通しがよくなったし、本当に簡単なコードでいろいろできるようになった。
また、JQueryにはいろんなプラグインがあり、それぞれがかなり便利に活用できるようになっている。そんなJQueryプラグインからモバイルアプリケーション用のライブラリであるjQuery Mobileというスマートフォン向けのWebアプリケーションを構築するためのプラグインが登場したようだ。

jQuery Mobileとは、jQueryのプラグインとして利用するモバイルアプリケーション用のライブラリです。そしてその驚異的なまでの簡単さは、これから業務用のモバイルアプリケーションの作り方を一変させてしまう可能性を感じさせます。

引用元: 「jQuery Mobile」の登場で、モバイルアプリケーション開発は大きく変わる - Publickey.

上記のページをざっと読んだ感じだと、ルックアンドフィールもシンプルで統一感があり、触って気持よさそうなデザインとなっている。
jQueryの強力なライブラリにプラグインすることで、あらゆるスマートフォン向けのアプリケーション構築が加速するのでは無いだろうか。

ちょっと、これは導入しないわけにはいかないですね。

FacebookTwitterHatenaTumblr共有

IIS 6.0 から IIS 7.0 への ASP.NET アプリケーションの移行

クラシック モードは、ISAPI 拡張を使用して ASP.NET ランタイムを呼び出すことで、IIS の以前のバージョンとの下位互換性を維持します。このオプションでは、通常、既存のアプリケーションをほとんどまたはまったく変更する必要がありません。

IIS 7.0 統合モードを使用するには、アプリケーションの Web.config ファイルに若干の変更を加える必要がある場合があります。IHttpModule インターフェイスを実装したカスタム モジュールをアプリケーションが使用している場合、その他にもいくつか変更が必要になる場合があります。

IIS 6.0 から IIS 7.0 への ASP.NET アプリケーションの移行

あとで、読みたいからメモ。

カスタムコントロールのプロパティの型をコントロールにしたい時に必要なTypeConverterの実装

以前に、.NET Framework1.1を利用している時に下記のエントリをしました。

カスタムコントロールのプロパティの型をコントロールにしたい時に必要なTypeConverterの抽象クラスです。

各、コントロール毎にTypeConverterを一から作るのはめんどくさいので、抽象クラスを作っておいて、継承先で型を指定するプロパティをオーバライドする事で指定の型のTypeConverterを作成しています。

バージョンは1.1:カスタムコントロールのプロパティの型をコントロールにしたい時に必要なTypeConverterの抽象クラス – NAL-6295の舌先三寸

今回、ジェネリックを利用する事で、抽象クラスである必要が無くなり、継承する必要がなくなりました。

利用するときに、その型を指定すればよいだけです。

using System;
using System.Drawing;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
namespace NAL6295.Web.UI.Controls
{
/// <summary>
/// コントロールの型情報と型名の相互変換
/// </summary>
/// <typeparam name="T">System.Web.UI.Controlを継承したクラスのみ指定可能</typeparam>
public class ControlConverter<T> : System.ComponentModel.StringConverter where T:System.Web.UI.Control    {
private ArrayList _values;
/// <summary>
///		値リストのサポートを許可する
/// </summary>
/// <param name="context"></param>
/// <returns></returns>		
public override bool GetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContext context)
{
return true;
}
/// <summary>
///		値リストの作成
/// </summary>
/// <param name="context"></param>
/// <returns>デザイン画面に存在するControlTypeプロパティで指定されたコントロールのリストを取得しそのIDリストを返す</returns>
public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(System.ComponentModel.ITypeDescriptorContext context)
{
_values = new ArrayList();
foreach (System.Web.UI.Control item in GetControlList(context))
{
_values.Add(item.ID);
}
return new System.ComponentModel.TypeConverter.StandardValuesCollection(_values);
}
/// <summary>
///		文字列型から指定された型への変換
///		選択リストに無い文字列が指定されていたときは、String.Emptyを返す
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
foreach (System.Web.UI.Control item in GetControlList(context))
{
if (item.ID == (string)value)
{
return base.ConvertFrom(context, culture, value);
}
}
return string.Empty;
}
return base.ConvertFrom(context, culture, value);
}
/// <summary>
///		指定された型のリストを返す
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
private object[] GetControlList(ITypeDescriptorContext context)
{
IReferenceService serv = (IReferenceService)context.GetService(typeof(IReferenceService));
return serv.GetReferences(typeof(T));
}
}
}

利用例:

public class カスタムコントロール : Control
{
//いろんな処理
private _hintControlName = "";
[TypeConverter(typeof(ControlConverter<Label>))
,DefaultValue("")
,Description("このコントロールのヒントを表示するラベルを選択するプロパティです。")]
public string Hint
{
get
{
return _hintControlName;
}
set
{
_hintControlName = value;
}
}
//いろんな処理
}

responseHeaderEncodingとsafariと文字化け

ASP.NETで日本語名のファイルをダウンロードするときは、ブラウザの「開く」動作で文字化けしないようにweb.configのglobalizationに

responseHeaderEncoding="Shift-Jis"

と設定するんだけど、このファイルをsafariでダウンロードするとものの見事に文字化けする。

しかも、ダウンロードしたファイルを開こうとしてもExcelでは開けないような化け方をする。

逆転の発想

1.1の頃からの話ですが・・・

ASP.NETでTextBoxの内容を検証するとき、Validatorを配置してValidatorのターゲットをそのTextBoxにするようになっている。

でも、私はValidatorをペチペチ貼るのが大嫌いでした。

だから、

TextBoxを継承したカスタムコントロールにValidatorsというプロパティを追加した。

そして、よく利用する検証ロジックについてIValidatorを実装したクラスを用意して、Validatorsプロパティに複数登録できるようにした。

これで、修正も追加も楽になったし見通しが良くなった。

これが、良いか悪いかは、観測地点によると思うが、こういう逆転の発想も良いと思う。