2009年7月18日 (土)

Wizard中のCustomValidatorコントロールが効かない

Wizard中のCustomValidatorコントロールが効かない場合は、

WizardStepのStepTypeがStart,Stepであるかチェックする。

Finishとかだと効かないで、次のステップに進んでしまう。

2008年10月 8日 (水)

モバイル ASP.NETでの多国語化メモ

携帯電話向けのモバイル用ASP.NETでも、多国語化が可能だ。ただし、自動的にリソースファイルを生成する機能は無いので、自分でやる必要がある。

各ページで、ページ言語(カルチャー)を書き換える必要がある。これはMobile.Pageから派生させたクラス(例:ExtraMobilePage)を作成して共通関数を記述し、各ページはそのクラスから継承するようにすれば簡単にできる。

public class ExtraMobilePage : System.Web.UI.MobileControls.MobilePage
{
    protected override void InitializeCulture()
    {
        String selectedLanguage = "ja-JP";
        if (Session["Language"] != null)
        {
            selectedLanguage = (String)Session["Language"];
        }
        UICulture = selectedLanguage;
        Culture = selectedLanguage;

        base.InitializeCulture(); ;
    }

2008年9月23日 (火)

ASP.NETでの多国語化メモ2

リソースファイルのプログラムでの利用

GetLocalResourceObject("<リソースのキー名>").ToString()

リソースのキー名は、ソースコードのmeta:xxxxxxxを参照すること。基本はコントロール名+プロパティだが、TextBox1Resource.Textのように、Resourceが付いたものになる。

.Textの一部を置換させて表示させたい場合も、上記のリソース参照を使う。TextBox1.Text.Replace(...だと、元のTextBox1.Textを参照するので、意図した結果が得られない。

ASP.NETでの多国語化メモ1

  1. 静的な文字はすべて、LabelまたはLiteralに置き換える
  2. ツール-ローカルリソースの生成で、リソースファイルを作成する。
    App_LocalResourcesの下に同名ファイル名のリソースファイルが作成される
  3. リソースファイルをコピーし、貼り付けする
  4. コピーしたファイルをリネーム
    拡張子の前に言語文字(英語なら.en)を加える
  5. リソースファイルの内容を翻訳する

これでブラウザが英語なら、英語のページが表示される

2008年8月17日 (日)

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

下記を参照

http://d.hatena.ne.jp/m-tanaka/20070509#p1

補足

プログラムは、別なライブラリ(下記だとMobileWebAdapter)にするようだ。(普通のクラスだと、呼び出し方が良く分からない)

        <device name="exHTMLDeviceAdapters" inheritsFrom="ChtmlDeviceAdapters">
         <control name="System.Web.UI.MobileControls.Form" adapter="MobileWebAdapter.CHTMLUtnFormAdapter,MobileWebAdapter"/>

テストは、携帯電話プラウザ(エミュレータでもOK)で行う。ディスクトップのブラウザでは、反映されない(当然なのだが、忘れてしまいがち)

mobile:TextBox に istyle 属性を追加する

下記を参照

http://d.hatena.ne.jp/m-tanaka/20070509

補足

web.configの例

         <control name="System.Web.UI.MobileControls.TextBox" adapter="MobileWebAdapter.IStyleSupportTextBoxAdapter,MobileWebAdapter"/>

2008年7月21日 (月)

フォーム認証の有効期限

フォーム認証の有効期限は、Web.configのauthenticationにて行う
(下記の内容が本当に正しいかどうかは、自分で確認してください)

パラメータにTimeoutがあるが、これは、ブラウザを閉じない場合の有効期限であり、閉じてしまえば、そこで有効期限に関わらず終了となる。

ブラウザを閉じた後も継続したい場合は、クッキーを使うことで、永続的に有効期限内で認証させることができる。C:\Documents and Settings\<ユーザー名>\Cookiesを見てみると、ファイルが作られてるのが確認できる。

ただし、これでも有効期限を過ぎると、認証は終了してしまう。有効期限がない、つまり、一度、認証されたら終了しないような指定はできない。
ただし、slidingExpirationをTrueにし、有効期限をスライドさせていくことにより、長期間、認証を継続させることは可能である。

例:

<authentication mode="Forms">
   <forms  name="auth" slidingExpiration="True" loginUrl="Login.aspx" protection="All" path="/" timeout="10080"/>
</authentication>

この設定では、timeoutは、1週間(7日×24時間×60分=10080分)に設定され、slidingExpirationがTrueになっている。

RedirectFormLoginPage(<id>,true)にし、1週間に1度、サイトを開くことで、有効期限が永久になっているようにみせることができる。(ただし、最終ログインから、1週間を経過すると、再度ログインが必要となる)

2008年5月30日 (金)

モバイルWebでのAccessKey

1.Web.configに追加

  <mobileControls cookielessDataDictionaryType="System.Web.Mobile.CookielessData" allowCustomAttributes="true"/>
      <filter name="IsAccesskey" compare="supportsAccesskeyAttribute" argument="true" />
    </deviceFilters>

2.xxx.aspxに追加(例:Linkオブジェクト)

<mobile:Form id="Form1" runat="server" Alignment="Left">
<mobile:DeviceSpecific id="DeviceSpecific1" runat="server">
    <Choice Filter="IsAccesskey" Xmlns="http://schemas.microsoft.com/mobile/html32template
">
    </Choice>
</mobile:DeviceSpecific>

<P>
    <mobile:Link ID="Link1" Runat="server" NavigateUrl="xxx.aspx">0.xxx
      
<DeviceSpecific>
        <Choice accesskey="
0" Filter="isAccessKey"/>
      </DeviceSpecific>

    </mobile:Link>
</P>
<mobile:Form>

3.xxx.aspx.csに追加

  public bool isAccessKey(MobileCapabilities caps,
        string optValue)
    {
        if (!caps.Crawler && caps.SupportsAccesskeyAttribute)
            return true;
        return false;
    }

2008年4月14日 (月)

データが書き込まれない

AccessDataSourceで、データが書き込まれない時のチェック項目

  • Bindになっているか?
    Evalだと表示はされても、反映されない
  • Updateコマンドとコントロールが一致しているか?
    違っていれば当然書き込まれない。対応コントロールがないと、そのフィールドは空になるのでさらに注意
  • 変なところでDataBind()してないか?
    Page_Loadで、DataBind()していると、PostBackで、バインドし直されて、変更が消えてしまう。
  • 最悪、データソースを削除して、新規に作り直す。

2008年3月24日 (月)

ToolStripItemのApplicationSetting

ToolStripItemでもApplicationSettingで、プロパティのバインドが設定できるが、どういうわけか保存読み出しが利かない。

Properties.Settings.Default.xxx

に対して、手動で設定して

Properties.Settings.Default.Save();

すれば、保存できる(読み出しは、その逆)。

2007年8月 7日 (火)

XmlDataSourceのXPath式の例

○サンプルxmlファイルの内容
<?xml version="1.0" standalone="yes"?>
<Files>
  <File Kind="画像" FileName="xxx1.jpg" Aria="日本,東京"/>
  <File Kind="画像" FileName="xxx2.jpg" Aria="日本,大阪"/>
  <File Kind="音楽" FileName="xxx1.wav" Aria="日本,東京"/>
</Files>

○kindが画像で、Ariaに大阪を含むデータを抽出
/Files/File[@Kind='画像' and contains(@Aria,'大阪')]

変数値(例:大阪)にしたければ、XPath式をコードで作成し、バインドしなおせばよい。

2006年12月13日 (水)

styleSheetThemeをOffにする2

ソースで

<%@  StylesheetTheme="" %>

styleSheetThemeをOffにする1

Web.configで

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
    </system.web>
  <location path ="***.aspx">
    <system.web>
      <pages styleSheetTheme="" />
    </system.web>
  </location>
</configuration>

2006年8月31日 (木)

FreeTextBoxの基本設定

  • ソースの1行目Page設定で、AutoEventWireup="true"を加え、HTMLソースのチェックを解除する
  • 2行目に、下記を加える。
    <%@ Register TagPrefix="FTB" Namespace="FreeTextBoxControls" Assembly="FreeTextBox" %>
  • 配置したいところに、下記を貼り付ける
    <FTB:FreeTextBox ID="ftbMessage" runat="server" Text='<%# Bind("フィールド名") %>'  SupportFolder="~/FreeTextBox" Language="ja-JP" ToolbarStyleConfiguration="Office2003" />
                       

DetailsViewで削除の前に確認する

  1. CommandFieldをテンプレートに変換する
  2. 削除LinkボタンのOnClientClickプロパティに、
    return confirm("このデータを削除してよろしいですか");
    を入力

DetailsView内のコンポーネントへのアクセス

例:

((TextBox)DetailsView1.FindControl("TextBox3")).Text