手探りASP.NET MVC(2) 「」

今回は「<%: %>」を紹介します。

通常、なにか出力する際にはHTMLエンコードを行い、不正なタグを挿入されることを防ぎます。しかし、この操作は面倒で、冗長で、忘れやすいです。そこで、今回紹介する「<%: %>」を使用します。このメソッドを使用することで、簡潔にHTMLエンコードをかけることが可能です。

具体例を示します。

Html.Encodeを使用した例。

<%= Html.Encode("<script>alert('hello');</script>") %>

これくらいの例なら、平気ですが、大量に出てくるとうんざりしますし、忘れてしまうとXSS脆弱性を抱えることになります。そこで「<%: %>」の出番です。

<%: "<script>alert('hello');</script>" %>

より簡潔に記述することができますし、これなら忘れる心配も軽減されます。

良いですね、「<%: %>」。

参考URL:http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net-mvc-2.aspx

手探りASP.NET MVC(1) DropDownListメソッド

唐突ですが「手探りASP.NET MVC」をはじめます。内容としてはTipsを書いていきたいと思います。言語にはC#を使用します。自分用のメモなので、つぎはぎ・誤り等多いと思いますが、よろしくお願いします。ご意見、指摘事項等あればダイアリーのコメント、Twitter(http://twitter.com/bouzuya)などでいただけるとありがたいです。

さて、今回はSystem.Web.Mvc.HtmlHelperクラスのDropDownListメソッドについて紹介します。

HTMLでselect要素を使用することはよくあると思います。DropDownListメソッドはselect要素の生成を補助してくれます。

具体例を挙げます。複数の項目の中から特定の項目を選択した状態で表示する例を考えてみます。ここでは、選択肢の一覧はCategories、選択する項目はInitialCategoryというキーで、ViewDataプロパティにより与えられるものとします。

以下にDropDownListメソッドを使用しない場合のコードを示します。

<% var initialCategory = ViewData["InitialCategory"] as string; %>
<% var categories = ViewData["Categories"] as IEnumerable<string>; %>
<select name="category">
<% foreach (var category in categories) %>
<% { %>
	<% var isSelected = (category == initialCategory); %>
	<option value="<%= Html.AttributeEncode(category) %>" <%= (isSelected ? " selected=\"selected\"" : "") %>><%= Html.Encode(category) %></option>
<% } %>
</select>

冗長で読みづらいですね。

次にDropDownListメソッドを使用した場合のコードを示します。

<% var initialCategory = ViewData["InitialCategory"] as string; %>
<% var categories = ViewData["Categories"] as IEnumerable<string>; %>
<% var selectList = new SelectList(categories, initialCategory); %>
<%= Html.DropDownList("category", selectList) %>

すっきりしていて読みやすいです。

DropDownListメソッドの、第1引数はname属性およびid属性になります。第2引数は表示する項目(IEnumerable)です。

第2引数のためのデータ作成には、ベタで書くとSelectListItemをつめたListを作成することになると思います。しかし、この方法だと結局ループさせて選択項目を設定しないといけないため、DropDownListの恩恵が小さくなってしまいます。そこでSelectListクラスを使用します。SelectListクラスを併用することで、簡単に特定の項目を選択したIEnumerableを作成することができます。例には示していませんが、SelectListの他のコンストラクタでは、表示名として使用する項目、値として使用する項目を指定することも可能です。

良いですね、DropDownList & SelectList。

日商簿記3級に合格しました

先日書いたとおり、日商簿記3級を受験していたのですが、今週のはじめに結果が発表されており、無事、合格していました。ブログに書いていましたし、まわりにも受験したことを伝えていたこともあって、落ちたら恥ずかしいと思っていたので、合格できたことで、ほっとしています。

「短期間で学習し結果を出す」という目標については達成できました。期間は全体で2週間程度、集中したのは1週間程度でしょうか。「勉強すれば合格できる」と言われるレベルの目標であっても、やはり達成できると嬉しいものですね。

目的であるところの「財務に強くなる」という観点ではあまり役に立たない試験だったように思います。今後の業務で仕訳をさせられることは、まずありませんから……。BS、PLという単語を覚えることはできました。

ひとまず、合格を祝いたいと思います。今後はまた何か別の目標を設定したいところですね。

MonoDevelopを試用しています

今月からMonoDevelopを試用しています。

以前はSharpDevelopを使用していたのですが、エディタ部分の描画の遅さを理由に使用をやめました。縦置きモニタを購入し、最大化表示してSharpDevelopを使用すると、極端に遅くなり、使い物にならないからです。エディタ部分の描画速度という点で、MonoDevelopには特に問題はありません。

SharpDevelopSubversionとの連携、StyleCopとの連携、NUnitの連携をはじめから備えていました。MonoDevelopSubversionやGitとの連携や、NUnitとの連携ははじめから備えていますが、StyleCopについては特に用意されていません。おまけにビルドにMSBuildを使用しないためか、プロジェクトファイルを使用してStyleCopを走らせることもできません(原因は詳しく調査できていないため分かりません)。

そこでMonoDevelop StyleCop AddInをインストールしました。1ファイルずつしか検査できませんが、ひとまずこれで過ごしてみます。

MonoDevelopはまだ使用していない機能も多く、なんとも言えません。細かいバグが多いような気はしていますが、もう少し試してみようと思います。

日商簿記3級を受験しました

日曜に日商簿記3級を受験しました。

日商簿記3級の周囲からの評価は「合格して当然、勉強すれば合格できる」というもの。残念なことですが、私の周りでは持っていたとしても、評価が上がるものではありません。ですので、ただ合格しても仕方がありません。

そこで今回は学習期間を短く抑えながら、合格を目指すことにしました。

まず「最短7日で学習できる」という書籍を購入し、実際に7日でできるのかを試しつつ、期間の短縮を意識することにしました。

4日目からは範囲の大きさをつらく感じましたが、約7日で終了できました。内容としてもおおよそ理解することができたと思います。

本番同様の形式である模擬問題を一度だけ解いて、友人から電卓を借り、試験にのぞみました。

試験当日は時計を忘れるという問題はありましたが、計算した金額も無事一致しましたし、合格点には届くのではないかと考えています。

ひとまず結果を待ちたいと思います。

TOEICの結果(2)

10月末のTOEIC試験を受験しました。その結果について記録しておきます。

今回の結果は515点でした。

前回の点数との比較しますと、前回が480点だったことを考えると数字の上では良くなっています。ただ990点中の35点は誤差と言っていいと思います。ほぼ横ばいの結果だったと言えるでしょう。

点数の内訳としてはリスニングが前回より100点近く高い320点、リーディングが前回より50点近く低い195点。前回のリーディングは運が良かったと感じていたので、今回の結果は妥当です。逆に今回のリスニングは運が良かったようですね。

事前学習として、書いて覚えるつもりと前回書いていました。実際に試してみると、効果が小さいように感じました。聞きながらタイプして数をこなす方が効果が大きそうです。またTOEICに特化した学習については、あまり実施できませんでした。「実力でのぞむことができた」ということにしておきます。

次回に向けての学習としては、以前使用していたiKnow!を再開しようと思います。週あたり最低1時間を目安に学習していく予定です。

今回500点を超えたことを喜びつつ、まずは600点を超えること、安定してより高い点数をとることができるように努めたいと思います。