FC2ブログ
.net MVCで < とかを入力可能にする
 .net MVCでは、3.0以降、ブラウザからの入力データによる脆弱性が発生しないよう、既定の状態では <や > などの入力ができないよう制御が入っているようです。

 状況にもよるのですが、これらの文字を入力する必要が出る場合は多く、解除が必要な局面も多く出てきます。ここではその方法について備忘録として簡単に記載しておきたいと思います。

・web.configで無効化する
下記のように requestValidationModeを2.0に設定することで無効化する
<system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

・Global.asax(フィルタの設定かもしれない)で無効化する
 下記のフィルタ設定を追加する
filters.Add(new ValidateInputAttribute(false));

 本記事記載に当たっては、このネット上の記事を参考にしました。
 上記記載の両方の設定が必要か?など調べ切れていない部分あります。将来的にこれらの内容は、にてまとめ記事を作りたいと思っていますが、まずは、これはと思ったものを備忘録として記録することにしました。

【.net MVC】

テーマ:ひとりごと - ジャンル:アフィリエイト

History apiを使用したブラウザ戻るの禁止
 Webベースのシステムを作る場合、ブラウザの戻るボタンの使用を禁止したい場合も多く出てきます。
 昔は大変な思いをしてイベントを操作した気がしますが、今はHistory APIをうまく使用することで、簡下記のようなコードを使用する単に実装できるようです。

if (history && history.pushState && history.state !== undefined) {
history.pushState(null, null, null);
$(window).on("popstate", function (event) {
if (!event.originalEvent.state) {
history.pushState(null, null, null);
return;
}
});

知っておくとすごく便利。
Qiitaの記事「jQueryでブラウザの戻るボタンを禁止する」を参考にさせていただきました。

【Javascript】

テーマ:ひとりごと - ジャンル:アフィリエイト

C#でオブジェクトのパブリックプロパティを簡単コピー
 特にMVCなどを使っていると、各オブジェクトのプロパティを連携するオブジェクトのプロパティに詰め替える必要が多く出てきます。
 オブジェクトごとに専用の詰め替えメソッドを用意してもよいのですが、そのメソッドの作成にかけるためをなるべく小さくしないと、詰め替え処理を作るだけで時間を浪費してしまします。
 この処理を簡単にするための方法を調査したので、まとめておきます。

[C#のプロパティコピークラスサンプル】



public static class PropertyCopier
{
public static T CopyTo(object src, T dest)
{
if (src == null || dest == null) return dest;
// コピー元のPublicなインスタンス属性(読み書き可能)を抽出
var srcProperties = src.GetType().GetProperties(
       System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance
   ).Where(p => p.CanRead && p.CanWrite);
// コピー先のPublicなインスタンス属性(読み書き可能)を抽出
var destProperties = dest.GetType().GetProperties(
       System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
    .Where(p => p.CanRead && p.CanWrite);
// LINQのJOINを使用して属性名とタイプが一致するもので、コピー元の属性をキーとしたプロパティを作成
var properties = srcProperties.Join(
        destProperties,
        p => new { p.Name,p.PropertyType},
        p => new { p.Name, p.PropertyType },
        (p1, p2) => new { p1, p2 });
// 作成プロパティを使用してコピー先の属性値にコピー元の属性値をコピー
foreach (var property in properties)
property.p2.SetValue(dest, property.p1.GetValue(src));
return dest;
}
}




なお、本内容の確認にあたっては、rksoftwareの記事「異なる型のオブジェクトに同じ名前のプロパティの値を全てセットする」を引用させていただきました。

C#の場合はこの形が多いと思いますが、Javaの場合は、BeanUtils#copyProperties()が用意されているようです。使い方は婿入りエンジニアさんの記事「[Java最強関数] BeanUtils.copyPropertiesのすゝめ」まとめられていました。

【C#】【Java】

テーマ:ひとりごと - ジャンル:アフィリエイト

C#でクラスにメソッドを追加できる拡張メソッドについて
C#では拡張メソッドを使うことによって、クラスの継承等を使うことなく、メソッドの追加を行うこともできます。
メソッドのバッティングやコードのトレーサビリティ?などを考えると使う局面の吟味が必要かもですが、便利な機能の一つでもあるので記録しておきます。

拡張メソッドを使用する場合は以下のようにします。

  • 拡張メソッドを定義した、staticクラスとstaticメソッドを準備する
  • 準備したstaticメソッドの第一引数にthis修飾子をつける
  • 拡張メソッドを使う場合は、usingを使用して拡張メソッドをインポートする

 使い方については、Qiitaに掲載された記事「【C#】拡張メソッドの作り方」にまとまっていました。そちらを参照してください。
 将来的にこれらの内容は、にてまとめ記事を作りたいと思っていますが、まずは、これはと思ったものを備忘録として記録することにしました。

【C#】

テーマ:ひとりごと - ジャンル:アフィリエイト

C#でIEnumerableを便利に操作できるLINQについて
C#では、配列、リストなどのIEnumerableを実装したオブジェクトを便利に操作できるLINQが提供されています。

using System.Linq; を組み込むことで、以下の機能を持つメソッド(おそらく拡張メソッド)を使えるようにするものです。

  • OrderBy, ThenByなどのソート関係
  • Skip,Takeなどの要素抽出
  • Select,Whereなどの条件指定要素抽出
  • Min,Max抽出などの集計

 要素抽出やソート後の戻り値はIEnumerableなので、例えば元のリストなどに場合はToList()でListに戻す必要があります。

 使い方については、Qiitaに掲載された記事「はじめてのLINQ」にまとまっていました。そちらを参照してください。
 将来的にこれらの内容は、にてまとめ記事を作りたいと思っていますが、まずは、これはと思ったものを備忘録として記録することにしました。

【C#】

テーマ:ひとりごと - ジャンル:アフィリエイト

copyright © 2019 koblogx さんのブログ all rights reserved.
Powered by FC2ブログ.