しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

MVC

SwissKnife.Mvc の 0.0.2 を NuGet でやっと公開しました

NuGet Gallery | SwissKnife.Mvc 0.0.2もうちょっと説明とかしっかり書けという感が満載なんですが、とりあえずいろいろと実装したかなと思ったので公開してみました。リファレンスなんて立派なものはまだないので、このエントリに基本的な機能を書いておき…

ASP.NET MVC 4 で現在の Display Mode を見てアクションを振り分ける

ASP.NET MVC 4 アプリケーションのスマートフォン対応は、理想的には ASP.NET MVC 4 というか Web Pages 2 で追加された Display Modes だけで解決できればいいんですが、今回はどうしてもアクションを分けたくなりました。しかし、他のページはビューだけ切…

IIS と Vary ヘッダと HTTP 圧縮モジュールのバグ

id:Waquesseix この記事を読んで早速vary: user-agentを追加しようと思ったら、なんかバグでvaryが変えられない(圧縮をオフにしない限り)みたいでがっくりしました。。。 ASP.NET でカスタム HTTP ヘッダを追加する方法 - しばやん雑記 そういえば、ASP.NET …

ASP.NET MVC 4 のブラウザオーバーライド設定の保存先をカスタマイズする

ASP.NET MVC 4 のブラウザオーバーライドを JavaScript から設定する - しばやん雑記 で ASP.NET MVC 4 というか Web Pages 2 のブラウザオーバーライド機能はクッキーを使って実装されていると紹介しましたが、実はこの User-Agent を保存する部分は開発者…

ASP.NET MVC 4 のブラウザオーバーライドを JavaScript から設定する

ASP.NET MVC 4 というか Web Pages 2 では、ブラウザのオーバーライド機能が追加されたことはみんな知っていると思います。知らなかった人は以下のブログ記事を 3 回ぐらい読んでおいてください。Making a switchable Desktop and Mobile site with ASP.NET …

Unity DI 3 で追加された ASP.NET MVC と Web API 向けライブラリ

更新内容を見ると ASP.NET MVC と Web API への対応を含んでるとありますが、これは何を指すのかちょっと不明ですね。 NuGet 2.5、Unity DI 3 が公開されていました - しばやん雑記 前回ではこんなふうに書いておきましたが Unity Developer's Guide を読む…

ASP.NET MVC でブラウザにページをキャッシュさせない方法

ASP.NET MVC には OutputCache 属性が用意されているので、多少は Cache-Control ヘッダを弄ることが出来ます。 [OutputCache(Location = OutputCacheLocation.None, NoStore = true)] public ActionResult Index() { return View(); } しかし、OutputCache …

ASP.NET MVC のモデルバインダで Dictionary を扱う

ASP.NET MVC のモデルバインダは List や配列は添え字がシーケンシャルであれば、複合型でも問題なくバインド出来るのは知っていましたが、今日まで Dictionary のバインドに対応してることを知りませんでした…。これは恥ずかしい。ASP.NET Wire Format for …

ASP.NET MVC の HTML ヘルパーと null の関係

ASP.NET MVC に標準で用意されている HTML ヘルパーはオーバーロードが非常に多いです。簡単な例を挙げると Html.BeginForm を使って GET として実行されるフォームを作成する場合は、以下のようにオーバーロードメソッドを使って書けますね。 @using (Html.…

ASP.NET MVC で SelectList を使ったフォームの検証を行ってみる

ASP.NET MVC で Html.DropDownListFor を使った場合、どうやって検証を行っていますか?不正な値が選択されないという想定で作る人もいると思いますが、大抵の場合はブラウザの開発者ツールで値を改ざんされて送られる可能性を考慮する必要があります。困っ…

ASP.NET MVC で Razor の基本クラスを変更する

ASP.NET MVC の場合は Razor で書かれたビューは System.Web.Mvc.WebViewPage クラスを基本クラスとしてコンパイルされます。例えば以下のようなシンプルな Razor ビューがあるとします。 @{ ViewBag.Title = "Index"; } <h2>Index</h2> これをコンパイラが C# コード…

ASP.NET MVC でチェックボックス周りを良い感じに扱う

ASP.NET MVC の HTML ヘルパーには CheckBox/CheckBoxFor メソッドが用意されていますが、これを使って実現できるのは bool でのオンオフが必要なチェックボックスだけです。しかし、世の中には「当てはまる項目にチェックを入れてください」というようなチ…

data URL スキームを作るヘルパー .NET 4.5 版

data URL スキームを作成するヘルパー - しばやん雑記 で data URL スキームを作るヘルパーを作っていますが、これを .NET 4.5 対応させてもうちょっと幸せになりたいと思います。 本来ならば MIME type を拡張子から判別してもいいんですが、IIS が持ってい…

DropDownListFor と ViewBag を組み合わせた時の問題

ASP.NET MVC でドロップダウンリスト周りを良い感じに扱う - しばやん雑記 で ViewBag に DropDownListFor で指定したプロパティと同じ名前で SelectList を入れておくと良い感じに使ってくれると書きましたが、実際に試していると 1 点だけ問題が出てきまし…

ASP.NET MVC でラジオボタン周りを良い感じに扱う

ラジオボタンを作成する Html.RadioButtonFor の使えない子っぷりが半端ないです。そのあたりの解説はみそ先生の記事を読んでください。ちょっと異色のRadioButtonHelper - miso_soup3id がデフォルトだと同じになってしまったり、表示させたい個数分だけ Ht…

ASP.NET MVC でバリデーションを良い感じに扱う

ASP.NET MVC はバリデーションの結果としてのエラーメッセージ出力が実装されていますが、これがいまいち自由度が低くて実際にはあまり使えないです。なので、良い感じにバリデーションを扱うためにヘルパーを作りました。 public static class ValidationHe…

ASP.NET MVC でドロップダウンリスト周りを良い感じに扱う

恐らく ASP.NET MVC で一番迷う人が多いと思うドロップダウンリストやラジオボタンですが、仕事でついに逃げられなくなったので堪忍して、まずはドロップダウンリストからいろいろとまとめました。普通は DropDownList を作る時に SelectList などを引数とし…

ASP.NET 4.5 で追加された検証属性とクライアントサイド検証

ASP.NET MVC ではクライアントサイド検証という機能があります。こいつを独自の検証属性で使うためには IClientValidatable インターフェースを検証属性に実装して、さらに JavaScript で実際に検証するコードを書く必要がありました。しかし、前回の ASP.NE…

ASP.NET MVC 向けに NoOutputCache 属性を作ってみた

ASP.NET MVC のデフォルトで生成される FilterConfig.cs で OutputCache 属性を使うと全てのコントローラで有効になります。 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new OutputCacheAttribute { Location…

ASP.NET MVC 4 で現在の Display Mode を取得する

ASP.NET MVC 4 というか Web Pages で追加された Display Mode を使うと条件を少し書くだけで、いろんなデバイス向けのビューに切り替えたりできて便利ですね。おかげでコントローラ側でデバイスを意識することなく書けるようになりました。しかし、世の中に…

ASP.NET MVC 4 で変わった点

やっと Windows 8 Pro + Visual Studio 2012 Ultimate + Office 2013 Preview の環境を作りました。というわけで MVC 4 の変更点をいろいろと見てみました。 ・Per controller configuration ・Per route message handlers ・Progress notifications ・Push …

SignalR と ASP.NET MVC の類似点、そして Project Silk

いまいち良いタイトルが浮かびませんでした。しかし、SignalR と ASP.NET MVC は考え方的に非常に近いと思ってます。例えば SignalR では Hub クラスを継承して新しいハブを作成することになっています。これはコントローラクラスに相当する部分になります。…

ASP.NET MVC と SignalR を組み合わせて使う

最近は Web API よりも SignalR で API を用意したほうが使い勝手がいいと思っているんですが、やはり SignalR だけでは完結できないことのが多いです。なので、今回は ASP.NET MVC と SignalR を組み合わせて使う方法について書いていきます。まず大前提と…

ASP.NET のセキュリティ対策について考える

XSS や CSRF の話題は相変わらず結構多いですね。例えば、はまちや2さんのブログに最近書かれたエントリとか。CSRFで強制ログインさせるというアイデア - ぼくはまちちゃん!(Hatena)曰く、Hatena や Facebook など多くのサービスがログイン画面では CSRF 対…

DataType 属性でお手軽 HTML5 Input Types 対応

DisplayFor/EditorFor と DataType の不文律 - しばやん雑記 で DisplayFor/EditorFor を使うときには DataType 属性を付けるのは常識(キリッ と書きました。しかし、DataType 属性でメタデータを付けてあげても、対応した HTML5 input types が出力されず、か…

ASP.NET MVC / Web API / Web Pages の Nightly 版を使ってみる

泣いてても仕方ないので、実際に使ってみます。MyGet で提供されてますが、これは個人用 NuGet と言うべきもので、NuGet と同じようにパッケージソースとして使えます。つまり、以下のように設定しろってことです。これで MVC 4 プロジェクトを作って NuGet …

ASP.NET MVC, Web API, Web Pages (Razor) がオープンソースに

ASP.NET MVC, Web API, Razor and Open Source - ScottGu's Blog今朝はこの話題で盛り上がりまくってました。ちなみにライセンスは Apache 2.0 です。ASP.NET MVC / Web API / Web Pages - Homeソースコードは git で管理されているので、fork して pull req…

ASP.NET MVC 4 Beta で追加された Single Page Application を試す

ASP.NET MVC 4 Beta で追加された Web API プロジェクトを試す - しばやん雑記 では Web API プロジェクトを試しましたが、今回はもう一つ追加された Single Page Application を試してみようと思います。プロジェクトの作成は今までと同じで、テンプレート…

ASP.NET MVC 4 Beta で追加された Web API プロジェクトを試す

ASP.NET MVC 4 は本当にランタイムの更新が皆無ですね。恐らく Web Pages 2 のが更新多いと思います。まあ、それはそれとしてベータで追加された ASP.NET Web API を使うプロジェクトを試してみたいと思います。WCF Web API では NuGet からインストールする…

ASP.NET MVC 4 Beta が公開されました

Download ASP.NET MVC 4 Beta from Official Microsoft Download CenterDeveloper Preview が BUILD で公開されてから結構時間がかかりましたが、ようやくベータが公開されましたね。どうやら Visual Studio 2010 SP1 専用のようで、.NET 4.5 DP がインスト…