しばやん雑記

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

MVC

ASP.NET Web Stack が一斉に更新されています

何気なく NuGet で Update-Package を実行したら大量にパッケージが更新されたので、よく見てみると ASP.NET Web Stack というか、OSS 部分が全てアップデートされていました。以下のパッケージが 4.0.20710.0 -> 4.0.30506.0 といった感じにビルドナンバー…

ASP.NET MVC 4 で複数の Display Mode を組み合わせて使ってみる

この方法の欠点としては別の Display Mode との共存が出来ないことです。なのでスマートフォンへの対応が必要ない、完全に PC 向けのページなら対応可能かと思います。 ASP.NET MVC 4 の Display Mode を使って多言語対応を試してみた - しばやん雑記 と書い…

ASP.NET MVC 4 の Display Mode を使って多言語対応を試してみた

ASP.NET MVC 4 というか Web Pages 2 で追加された Display Mode ですが、一般的にはスマートフォンやその他デバイス向けにビューを切り替えるために使われることが多いと思います。しかし、今回はデバイスの種類ではなく、ブラウザの言語設定にしたがってビ…

ASP.NET MVC で指定した値が入力されているか検証する属性を作ってみた

よく会員登録などのフォームにある、会員規約に同意しますというチェックボックスってありますよね。ASP.NET MVC でチェックされていない時にエラーを表示する場合、Required 属性を使えば対応出来そうだと考える人は多いと思います。 public class FormMode…

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 …

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

こんばんは、Windows 8 のプロダクトキーが完売で泣きそうです。ASP.NET MVC 4 : The Official Microsoft ASP.NET Siteそれはともかくとして、Visual Studio 2012 の RTM がめでたく公開されたのと同時に ASP.NET MVC 4 の正式版も公開されています。そして …

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 の Nightly 版が提供開始

ASP.NET MVC / Web API / Web Pages - View Discussionこれでビルドしなくても大丈夫ですね!頑張ってビルドしたのに つД`)・゚・。・゚゚・*:.。..。.:*・゚

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 がインスト…

ASP.NET MVC で Watermark を属性を使って実装してみた

実は ModelMetadata には Watermark プロパティが用意されていて、Display 属性の Prompt プロパティの値が自動的にセットされるようになっています。つまり、この値を使ってあげれば属性ベースで Watermark を実装できそうです。というわけで、jQuery Water…

ASP.NET MVC の ModelMetadata は奥が深い

ASP.NET MVC ではモデルクラスに設定されたデータアノテーション属性は、使用時に ModelMetadata へキャッシュされる形になってます。ModelMetadata クラス (System.Web.Mvc)データアノテーションを読み込んでいるのは DataAnnotationsModelMetadataProvider…

ASP.NET MVC で Twitter Bootstrap を使ってみた (4)

前回は IsValid という拡張メソッドを用意して対応しましたが、今回は BeginForm のように IDisposable と using を使って書き換えてみます。今回は拡張メソッドと IDisposable を実装したクラスを用意しました。実装は BeginForm と MvcForm クラスを参考に…

ASP.NET MVC で Twitter Bootstrap を使ってみた (3)

前回ではフォームのスタイルとスキャフォールディングを弄って、デフォルト時の見た目は非常にかっこよくなりました。しかし、実際に submit してみるとエラー表示が結構残念な感じです。当然ながら Bootstrap のクラスを使っていないからですね。ちなみに M…

ASP.NET MVC で Twitter Bootstrap を使ってみた (2)

昨日は Bootstrap を使う準備で眠たくなったので、今日はフォームを中心に弄ってみましたよっと。とりあえず適当にモデルクラスを作って、コントローラとビューをスキャフォールディングで自動生成して実行してみました。残念な結果になりました。しかし、ス…

ASP.NET MVC で Twitter Bootstrap を使ってみた (1)

こんばんわ、デザインが全くできない男。しばやんです。そんな私でも Twitter Bootstrap を使えばあっという間に最近っぽいイケてる Web サイトが簡単に作れちゃうんですよ。Page not found · GitHub Pagesパッと見は導入めんどくさそうだと思いますよね?自…

年末だからこそ ASP.NET MVC のモデルの作り方について考えてみる

Project Silk とか EFMVC とか Maintainable MVC Series を読んでると、どれもモデルが非常に厚いんですよね。 よくサンプルコードであるような EF の DB Model を直接 View に流し込むような作り方は使われていないわけですよ。そして、今朝 MVVM Framework…

ASP.NET MVC 3 と MEF 2 を組み合わせる

ASP.NET MVCの依存性注入とMEF 2Project Silk では Unity を使ってましたが、MEF 2 からは MVC 3 向けに IDependencyResolver の実装が入るみたいですね。さらにカタログを作らなくても規約ベースで上手いことインジェクションしてくれるみたいです。Managed…

ASP.NET MVC 4 で knockout.js を活用する

これは C# Advent Calendar 2011 用の記事です。 皆さんこんばんは、もうちょっとで今年一年終わりですね。まあ、そんなことはどうでもいいとして Ever17 の箱版プレイしましょうね。さて、今回は C# Advent Calendar と言いながら JavaScript かよ!という…

ASP.NET MVC 3 で UnityServiceLocator を使ってみる

前回はコントローラのコンストラクタでリポジトリのインスタンスを受け取るようにしてましたが、今回は IServiceLocator を経由してリポジトリのインスタンスを取得するようにしてみます。ServiceLocator を使うと UnityContainer で登録したクラスのインス…

ASP.NET MVC 3 と LifetimeManager の関係

Unity を使うと事前に登録しておいたクラスは自動的にインジェクションが行われて非常に嬉しいのですが、Entity Framework で使う DbContext は複数インスタンスが作られると、変更追跡やトランザクション的な意味でよろしくないですよね。そこで Unity には…

ASP.NET MVC 3 と Unity の組み合わせを試し中

ASP.NET MVC 3 から DI のサポートが追加されたんですが、どうも DI って好きになれなかったので放置してました。 しかし、Project Silk のソースコードを読んだのがきっかけになり、今更 DI について調べています。とりあえず ASP.NET MVC 3 プロジェクトを…

OutputCache のキャッシュを削除する

データベースに更新があった場合には、やっぱりキャッシュを削除して即時反映できるようにしたいですよね。普通なら SqlDependency を設定してあげればいいんでしょうけど、SQL Server の変更通知って正直設定よくわかってないですし、レンタルサーバで使え…

ASP.NET MVC で Server-Sent Events を試す

最近、サーバサイドでの対応が必要な HTML5 関連技術について調べていました。しばやんです。WebSocket は WCF WebSockets 使ったら楽勝!でしたが、HTML5 には Server-Sent Events という Comet を簡単に使えるようにした機能が用意されています。これは HT…