Home > Archives > 2006年9月 Archive

2006年9月 Archive

【ASP.NET】HyperLinkFieldでJavaScriptをリンクするとリンクが表示されない

  • Posted by:
  • 2006年9月30日 12:36

タイトルに書いたとおり、HyperLinkFieldでJavaScriptをリンクするとリンクタグが表示されなくなってしまいます。(DataTextFieldは正しく表示されます)
恐らくはクロスサイトスクリプティング対策なんでしょうが、もう少しなんか方法があればいいんですが...

<asp:HyperLinkField DataNavigateUrlFields="Url" DataNavigateUrlFormatString="javascript:hoge({0})" DataTextField="Name" />

仕方がないので、TemplateFieldに置き換えたら問題なく動きましたが、やはり面倒ですね。

<asp:TemplateField>
<ItemTemplate>
    <A id="ALinkFix" runat="server" href='<%# "javascript:hoge(" + DataBinder.Eval(Container.DataItem, "Url") + ")" %>'>
    <%# DataBinder.Eval(Container.DataItem, "Name") %>
    </A>
</ItemTemplate>
</asp:TemplateField>

【Atlas】Atlasを使った未入力チェックのサンプル

Atlasを使って、簡単なサンプルを作ってみました。
サーバサイドで一括チェックを行う際、チェック処理をAtlasを使うことでポストバックなしで実行します。
ポイントとなる点も特に無く、UpdatePanelで囲ってあげるだけで簡単に実現できます。
これなら、従来のコードに少し足してあげるだけですね。

aspxのコードは


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">
<title>Atlasを使った未入力チェック</title>
</head>

<body>
<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering=true />
<atlas:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="<BR>未入力エラー" ControlToValidate="TextBox1" EnableClientScript="False"></asp:RequiredFieldValidator>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="<BR>未入力エラー" ControlToValidate="TextBox2" EnableClientScript="False"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</atlas:UpdatePanel>
</form>
</body>
</html>

csのコードは


public partial class Default2 : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Validate();
}
}

【SQLServer】IDENTITY値の取得

IDENTITY(自動インクリメント)なフィールドを使っていると、当然出てくるのがIDENTITY値の取得です。
局面としては、子テーブルにレコードを登録する際に親のID番号が必要になるとかそんな感じでしょうか。

くれぐれも、
SELECT MAX(ID) FROM HOGE
なんてしてはダメなんですよね。今登録したIDが最大値なんて保証は無いし、何より遅いし。

一番手っ取り早い方法が、@@IDENTITYを使う方法なんですが、使い方によっては問題もあるようですね。
@@IDENTITY クライシスを管理する

要約すると、@@IDENTITYを使った場合は、トリガーによってIDENTITY値が増えたときの値まで取れてしまうとのこと。
で、その解決方法としてSCOPE_IDENTITY() なんかがあるんですが、有効範囲とか微妙に分かりにくいので、分かりやすく解説されているページを探してみました。
[Landscape - エンジニアのメモ]IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY の違い

SCOPE_IDENTITY()の場合、確かにトリガーの影響は受けないものの、有効範囲が非常に小さく(例えば同一ストアド内)使いにくいんですね。
具体的には、以下のような命令を纏めて実行するのは問題ないけど、バラバラに実行するとIDENTITY値はNULLとなってしまいます。


begin transaction;
insert into IDENTITY_TEST (name) values ('hoge');
select SCOPE_IDENTITY();
commit transaction;
※ INDENTITYフィールドとして、IDという列があると思ってください。

問題になりそうなところはトリガーの掛け方だと思うので、そこを注意すれば大した問題でもない気がしますが...

【Atlas】Atlasの使い方ビデオ

Atlasは大変素晴らしい技術だと思うけど、英語のページばかりでよく分からん。
という人は多いと思います(私も英語が苦手なので...)が、ビデオで見ると分かりやすかったりします。
Atlasだけでなく、プログラムの組み方なんかも、「へえ~」と思えるところがいっぱいでした。
(私は本当に英語が苦手なので、音声を切って見ていたりします。英語が苦手な人はこの作戦でどうぞ!)

8月25日のScottGu's Blogでリンク集が紹介されています。
[ScottGu's Blog]Great New Atlas Videos Published (All Free)

これは、7月27日のScottGu's Blogで紹介されている
[ScottGu's Blog]Atlas “How Do I?” Video Series Begins
の内容も含まれているようです。

結構な本数があるので全部見るのは時間がかかりますが、普通に勉強するよりも理解しやすいと思います。

【Atlas】LiveControls

  • Posted by:
  • 2006年9月 6日 12:31

Atlasの情報ばかり追いかけていたら、いつの間にやらGrapeCityもAjax製品を出していたようです。
全くのノーマークでした。

LiveControls
LiveControls 1.0J オンラインデモ
[aspxの日記(ASP++ブログ) by Moo]Grapecity,Ajax機能を搭載したWebアプリケーション用のコントロールセット「LiveControls 1.0J」を発売

こちらもなかなか良さそうですが、値段がなかなか...
個人的にはatlasを待ちます。

【VisualStudio.NET】sealedキーワードでインライン化

  • Posted by:
  • 2006年9月 3日 13:24

第 5 章 「マネージ コード パフォーマンスの向上」
ちょっと長いドキュメントですが、「sealed キーワードの使用を検討する」の見出しの部分になります。

簡単に説明すると、仮想メソッド(virtual)をオーバーライド(override)していてもう継承する予定が無い場合、sealedを付けると高速化するというもののようです。
「クラス設計を拡張する必要がないなら、仮想メンバは使わないようにしてください。仮想テーブル検索による呼び出しの負担が大きく、実行時のパフォーマンス最適化を妨げる場合があるためです。」
と書いてあるように、仮想メソッドはオーバーヘッドが大きいようです。
sealedで明示的に終わりを宣言すると、コンパイラの最適化でvirtualなメソッドの中身をインライン化するようです。
そうすると実質的にはvirtualの呼び出しが行われなくなるので(インライン化されているから)、高速化するという理屈なんじゃないかなと思います。

微妙な高速化ですが、繰り返し処理で使われている場合は改善が見込めるかもしれません。

Index of all entries

Home > Archives > 2006年9月 Archive

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

増補改訂版 Java言語で学ぶデザインパターン入門
増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

J2EEデザインパターン
J2EEデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本
世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本

Return to page top