日本語URLのページをUrlEncodeしてRedirectしても、ポストバック時には日本語のURLになってしまう。
今のところ回避手段は見つからない。
ASP.NET1.1です。
表題の通りですが、
RadioButtonコントロールを継承して、以下のコードを書くと
グループ化できるし、ポストバック時にCheckedプロパティも
正常に動作します。
001 <DefaultProperty("Checked"), ToolboxData("<{0}:RadioButtonEx runat=server></{0}:RadioButtonEx>")> _ 002 Public Class RadioButtonEx 003 Inherits System.Web.UI.WebControls.RadioButton 004 005 Public Overrides ReadOnly Property UniqueID() As String 006 Get 007 If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then 008 Return MyBase.UniqueID 009 Else 010 Return Me.GroupName() 011 End If 012 End Get 013 End Property 014 015 Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs) 016 Me.Attributes.Add("value", MyBase.UniqueID) 017 MyBase.OnPreRender(e) 018 End Sub 019 020 Protected Overrides Sub OnInit(ByVal e As System.EventArgs) 021 MyBase.OnInit(e) 022 Me.Checked = MyBase.UniqueID = Me.Page.Request.Form.Item(Me.GroupName) 023 End Sub 024 End Class 025
HttpSessionStateはオブジェクトを識別するキーが文字列であるため、チームで開発する時などは、馬鹿な奴が勝手にオブジェクトを登録しているような事もあるのではないだろうか。
さいわいな事に僕が担当している開発では、そのような事は起こっていないのだが、それは、ある事をしているからである。
それは、HttpSessionStateやHttpApplicationStateをラッピングしたクラスを作成し、そのクラス経由でアクセスするようにするという手段だ。
そして、そのラッパクラス経由でオブジェクトを登録する時は、識別キーとして、System.Enum型の値を渡す必要があるため、列挙型に登録されている必要がある。
勿論ラッパクラス内部では、そのSystem.Enum型の値を文字列型に変換し登録している。
この手法を使えば、勝手に変なオブジェクトを登録される心配が無い。
副産物として、登録するモノが決まってくると、登録する場面も決まってくるため、ある程度、コーダーのコーディングにぶれがなくなる。
それが、ベストプラクティスか?と聞かれると、そうでは無いかもしれないが、案外有効な方法だと思う。