ASP.NET Mobile ControlでFormにutn属性をつける

DoCoMoの携帯電話の端末IDを取得するには、formやaタグにutnという属性をつける必要がある
(http://www.limy.org/program/mobile/uid.html)

しかし、Mobile ControlのFormはutn属性の出力に対応していないので、これを出力できるCHTML用のDevice Adapterを作ってみる


public class CHTMLUtnFormAdapter :ChtmlFormAdapter
{
public override void Render(HtmlMobileTextWriter writer)
{
if(base.Control.CustomAttributes["utn"] == null)
{
base.Render(writer);
return;
}

try
{
StringBuilder sb = new StringBuilder ();

StringWriter swr = new StringWriter (sb);

HtmlMobileTextWriter hwr = (HtmlMobileTextWriter)
writer.GetType().
GetConstructor(new Type[]{writer.GetType(),typeof(MobileCapabilities)}).
Invoke(new object[]{swr,HttpContext.Current.Request.Browser});

base.Render (hwr);
string html = sb.ToString ();

Regex formRegex = new Regex("

ChtmlFormAdapterのソースは結構複雑なので、これに手を入れることはあきらめ、
出力内容を一旦StringBuilderにためておき、正規表現でformの開始タグをマッチさせ、
utn属性を付加しています

使用方法は、
STEP1 PageのAllowCustomAttributesをtrueに設定する
STEP2 Web.configで、FormとAdapterを関連付ける







STEP3 FormにutnのCustomAttributeをつける
(値はなんでもよい)