2011年9月14日水曜日

アソシエーションを追加できないテーブルはビューを代用

下記のようなマスタは、アソシエーションを作成できない。

1:KBN(主キー:外部キーでない)
2:CODE(主キー:外部キー)
3:NAME
仕方ないので、KBNごとに抽出したビューを作成して代用しました。
(参照しかしないので)

ビュー
1.CODE(主キー:外部キー)
2.NAME

SelectListにSelectedValueを指定しているのに、選択表示されない

Html.DropDownList引数のSelectList。
設定したSelectListには、確かにSelectedValueが設定されているのに、選択表示されない。

デバッグしてみると、GetModelStateValueというメソッドでID名からobjectが取得できると、
選択処理のロジックに入っていなかった。
メソッドの名前から推測するに、渡しているModelのプロパティ名をIDに付けるとだめなようで、
IDを違うものに変更したら、ちゃんと選択表示された。

2011年9月9日金曜日

C#の多次元配列

JAVA出身の私。
多次元配列のnewでコンパイルエラーになるなーと思って調べていたら、
C#の場合、多次元配列は[*,*]で表現するのだとか。

×  int[][] a = new int[2][2];
○  int[,] a = new int[2,2];

知りませんでした~。

2011年9月7日水曜日

孫画面でセッションが引き継げない

調べていたら、MSのサポート情報を発見。

http://support.microsoft.com/kb/831678/ja

でも、IE7で、「親⇒子モーダル⇒孫モーダル」だけど、同じ現象。
そもそも、子モーダルからwindow.openができなかったから、
(孫画面は立ち上がらず、自画面を閉じたら、親画面にリロードされた)
showModalDialogを使ったというに。

もうちょっとあがいてみる。

2011年9月1日木曜日

HttpSessionStateBaseとHttpSessionState

MVCコントローラ内でのSessionはHttpSessionStateBase。
ASP.NET内でのSessionはHttpSessionState。

HttpSessionStateBaseを拡張したHttpSessionStateWrapperクラスを利用すれば、HttpSessionStateを扱える。

たとえばGrobal.asax内で。

HttpSessionStateBase session = new HttpSessionStateWrapper(Session);

2011年8月24日水曜日

カレンダー入力補助機能datepicker

カレンダー入力補助機能。
AjaxToolKitも使ったことがあったけど、標準でできないかと調べてみると、
MVC3に標準装備のjquery-ui.jsでdatepickerが利用できた。

<link href="<%= Url.Content("~/Content/themes/base/jquery-ui-1.8.16.custom.css") %>" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-1.4.4.js") %>"></script>
<script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-ui.js") %>"></script>
<script type="text/javascript">
  $(document).ready(function () {
   $('.date').datepicker({ dateFormat: "yy/mm/dd" });
  });
</script>


あとは、利用したいTextBoxで下のように書くだけ。
<%=Html.TextBox("Date", Model.Date, new { @class = "date})%>

jquery-ui-1.8.16.custom.cssはThemeRollerサイトで自分好みに作れます。
http://jqueryui.com/themeroller/

カスタマイズはこの辺読んだらできそう。(英語だけど)
http://docs.jquery.com/UI/API/1.8/Datepicker#options

日本語化は、カスタマイズしてもいいけど、
jquery.ui.datepicker-ja.jsを追加で取り込むだけでもできる。

2011年8月20日土曜日

HtmlHelperの拡張

好きなnamespaceで、好きなclasss名で拡張できる。
(別に、基本クラスを指定しなくてもよい)
第一引数にthisをつけて、HtmlHelperを指定するだけ。

public static string Label(this HtmlHelper html, string name, string className)
{
    ...
}

ちなみに、View全般で利用するときは、Web.configで追加しておけば、わざわざ個別に@import文を書かなくていいから便利。

<namespaces>
    <add namespaces="○○○" />
</namespaces>

あとは、Html.Label()で呼び出すだけ。便利~