ひっそりと生きるプログラマのブログ

日頃気になった事なりを書き留めるブログです。関心ごとは多くもう少し更新頻度を上げたいところです。

ASP.NET MVC モデルバインド時に DataAnnotation を実行しない方法

タイトルの通り、モデルバインド時に、
DataAnnotation を実行しない方法です。

DataAnnotationsModelValidatorProvider を、
ModelValidatorProviders.Providers から取得し削除します。

using System.Linq;
using System.Web.Mvc;

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ModelValidatorProviders.Providers.Remove(
            ModelValidatorProviders.Providers.Single(
                p => p is DataAnnotationsModelValidatorProvider));
    }
}

排他制御

仕事で Mutex を使う機会というのは意外と多い。
同一のプロセスで排他制御するのであれば lock ステートメントでよいが、
他のプロセスなりと関連して排他制御する場合は lock ステートメントだと難しい。

その点、 Mutex を利用するとその辺りがお手軽に実現できて便利です。

C# 6.0 文字列補間 (String interpolation)

仕事上、使う事がほぼないので、
思い出したようにいろいろと勉強しています。

面白いと感じた機能は多いのですが、
これはそのひとつで「文字列補間」です。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Hello("太郎", 21));
            Console.WriteLine(Hello("次郎", 32));
            Console.ReadLine();
        }

        static string Hello(string name, int age)
        {
            return $"name = {name} / age = {age}";
        }
    }
}

これまでであれば、

            string.Format(@"name = {0} / age = {1}",name,age);

なりと、実装した箇所が、

            $"name = {name} / age = {age}";

として実装する事が可能となりました。
これだけでも便利だと思うのでとても素敵です。

細かい仕様になりについては、これから勉強します!!

ASP.NET Responsive Design について

今更ですが、ちゃんと知っておこうという事で実践しつつ、
学習を進めていこうと思っています。

学習を始める前に、私の環境は以下の通り。

試しに、最小の構成で動かしてみる。。。

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link rel="stylesheet" href="~/Content/bootstrap.css" />
    <script src="~/scripts/jquery-1.9.1.js"></script>
    <script src="~/scripts/bootstrap.js"></script>
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Default" asp-action="Index" class="navbar-brand">Index</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Default" asp-action="Test1">テスト1</a></li>
                    <li><a asp-area="" asp-controller="Default" asp-action="Test2">テスト2</a></li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

一先ず、以下の参照すれば動きそうですね。

    <link rel="stylesheet" href="~/Content/bootstrap.css" />
    <script src="~/scripts/jquery-1.9.1.js"></script>
    <script src="~/scripts/bootstrap.js"></script>

ASP.NET MVC の Json形式へのシリアライズ(JsonResult)

ASP.NET でアクションメソッドの結果として、
Json形式を返す場合、ControllerクラスのJsonメソッドの返り値を返します。

その際に、内部ではどのように Json化しているのか、気になったので少し調べてみました。
調べた際のアセンブリおよびバージョンとクラスは以下の通りです。

アセンブリ:System.Web.Mvc
バージョン:Version=5.2.3.0
クラス:System.Web.Mvc.JsonResult


調査した結果、"JavaScriptSerializer"にてオブジェクトをシリアライズしているようです。
上記のクラスで Json形式へシリアライズすると、
不適切な結果へシリアライズされるケースがあるので、個人的には好ましくないと思う次第です。