2010年10月20日

半角カタカナは全角に、全角の英数字、記号、スペースは半角に変換

Webアプリなどで入力した文字列を半角や全角で統一したい場合に使えます。
※Imports System.Text.RegularExpressions の宣言を忘れずに

'/// 半角カタカナは全角に変換し、全角英数字記号は半角に変換 //////
Public Function ConvANK(ByVal moto As String) As String
'-- 全角の英数字、記号、スペースを半角に --
Dim re As Regex = New Regex("[0-9A-Za-z:,. ]+")
Dim output As String = re.Replace(moto, AddressOf myReplacer)
'-- 半角カタカナ(Unicodeで\uFF61-\uFF9Fが範囲)を全角に --
Dim re2 As Regex = New Regex("[\uFF61-\uFF9F]+")
Dim output2 As String = re2.Replace(output, AddressOf myReplacer2)
Return output2
End Function

'/// 半角変換 ///
Shared Function myReplacer(ByVal m As Match) As String
Return Strings.StrConv(m.Value, VbStrConv.Narrow, 0)
End Function

'/// 全角変換 ///
Shared Function myReplacer2(ByVal m As Match) As String
Return Strings.StrConv(m.Value, VbStrConv.Wide, 0)
End Function

posted by なっちゃん at 15:16| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年10月19日

ASP.NET AjaxでMsgBoxを使う

以前「ASP.NETでMsgBox(もどき)を使う」を紹介したが、これはASP.NET Ajax上ではエラーになる。
そこで、Ajax上(UpdatePanel内)でも動作する新バージョンを紹介する。

'//// Ajax対応版MsgBox //////
Private Sub AjaxMsgBox(ByVal msg As String)
Dim strScript As String = "alert('" & msg & "');"
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, Me.GetType(), _
"msgbox", strScript, True)
End Sub
posted by なっちゃん at 20:49| 静岡 ☁| Comment(2) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2010年10月07日

「プレフィックスの最大数を超えています...」エラーの顛末

ASP.NET3.5でListViewを使ったWebアプリでデータの更新(UpdateCommand)を実行しようとしたときエラー「数値 名'System.Web.UI.WebControls' プレフィックスの最大数を超えています。最大数は 3 です。」が発生した。

デバッグポイントを追ってみたらListViewのEditItemTemplateのコントロールからデータを取得している最中に起こっているらしいことが判った。「プレフィックスの最大数」でググッてみるとほとんどがデータベース(SQLServer)に関する問題なので、それ以前に発生しているのが変だなと思っていたところ何度もデバッグするうちにエラーの発生する箇所が特定できないことが判った。
ステップオーバーで一行ずつ確認してみると早くエラーすることもあれば最後まで取得可能な場合もある。当初はコントロールからの取得に問題があると考え、しかも「System.Web.UI.WebControls」と表示されているのでコントロールに問題があるとばかり考えていろいろ修正してみたのだが、一向にエラーがなくならない。同僚にも確認してもらデバッグの状態を調べているうちに、とんでもない間違いを見つけた。全てはそれが原因だった。

コントロールから変数を取得する際、TextBox1.Textとすべきところを、TextBox1.ToStringとしていたのだ。その結果、'System.Web.UI.WebControls.TextBox'という文字列がSQL文に含まれ、これを解釈した結果が「プレフィックスの最大数を超えています」になったのである。ここにはドット(.)が4つ、つまりプレフィックスが4つになっていたのだ。VisualStudioのコード入力支援で自動メンバ表示で誤って選択してしまった結果である。
またデバッグ箇所が特定できなかったのも解決に時間が掛かった原因でもある。ステップさせても突然先に進んでエラー箇所に行く前にエラーメッセージが出てしまうことがこれまでにも何度かあった。

また、このテストの過程で再確認したことがある。
それはTextBoxから変更された値を取得しようとしても ReadOnlyプロパティがTrueになっていると変更値が取得できないということだ。
posted by なっちゃん at 09:04| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。