‘.Net Framework’ カテゴリーのアーカイブ

Visual Studio 2010でjQueryのインテリセンスが効かなかったので

2010年5月11日 火曜日

いろいろと調べたところ、プロジェクトのobj\Debug、obj\Releaseの各フォルダにできる、DesignTimeResolveAssemblyReferencesInput.cacheというファイルに、jQuery-1.4.1-vsdoc.jsファイルの参照が含まれてないのが原因のようだった。

ソリューションエクスプローラ上でjQuery-1.4.1-vsdoc.jsファイルを一旦「プロジェクトから除外」し、 再び「プロジェクトに含める」を実行する操作をDebugモードとReleaseモードそれぞれで行ったところ、直った。

ASP.Net MVC 2の主な新機能

2010年4月25日 日曜日
○HTMLヘルパーを使ってフォームのコントロールを出力するときにIDの文字列を渡す必要がなくなった
今までは
<%= Html.TextBox(“ProductName”, model.ProductName) %>
と書いて
<input id=”ProductName” name=”ProductName” type=”text” value=”xxxxxx” />
のように出力していたが、下記のようにIDの文字列を渡す必要がなくなった。
<%= Html.TextBoxFor(model => model.ProductName) %>
○モデルクラスのプロパティにAttributeをつけることによってバリデーションをサーバ、クライアントの双方でできるようになった
System.ComponentModel.DataAnnotations名前空間下にある下記のAttributeが使用可能。
[Required]、[StringLength]、[Range]、[RegularExpression]
以下使用例。
[Required(ErrorMessage = "名前を入力してください。")]
[StringLength(50, ErrorMessage = "50文字以内です。")]
[Range(0, 120, ErrorMessage = "入力できる数字は0から120までです。")]
[ReqularExpression("^[0-9]{3}-?[0-9]{4}$”, ErrorMessage = “”]
クライアントでもチェックできるようにするにはViewに

<script src=”Scripts/MicrosoftAjax.js” type=”text/javascript></script>
<script src=”Scripts/MicrosoftMvcValidation.js” type=”text/javascript></script>

<% Html.EnableClientValidation(); %>

の3行を追加する。

ADO.Net Entity Frameworkのようにツールで自動生成するモデルを使っている場合は、
自動生成時に属性がなくならないように下記のようにする。
まずPartialクラスのファイルにMetadataType属性を追加する。

[[MetadataType(typeof(PersonMetadata))]
public partial class Person
{
}

次にメタデータクラスを追加して、プロパティに対してバリデーションを設定する。

[Bind(Exclude="ID")]
public class PersonMetadata
{
     [Required(ErrorMessage = "名前を入力してください。")]
     public string Name { get; set; }
}

ValidationAttributeクラスを継承したクラスを作ることによって、独自の検証属性を作ることも可能。

○Actionメソッドでデフォルト値を使えるようになった。
{controller}/{action}/{id}
のようなUrlの時に、

public ActionResult View(int id, [DefaultValue(1)]int page) {
  }

のような使い方が可能。

○非同期コントローラのサポート
非同期コントローラを使うことで負荷の高いサイトでサーバがスレッドプールを使い果たしてしまうのを防げる。

参考サイト

http://www.asp.net/learn/whitepapers/what-is-new-in-aspnet-mvc/

http://www.atmarkit.co.jp/fdotnet/scottgublog/20100113aspnetmvc2/aspnetmvc2.html

WPF でテーマを使用するには

2010年3月4日 木曜日

WPF.Themesを使ってWPFでSilverlight ToolkitのようなThemeを使用することができる。現状21種類のテーマが提供されている。

  1. WPF.Themes.dllWPFToolkit.dllを入手しそれぞれのDLLの参照を追加する。
  2. Windowタグに下記太字部分を追加する。(ThemeにShinyRedを使用する場合)

<Window x:Class=”WpfApplication1.Window1″
    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml
            xmlns:themes=”clr-namespace:WPF.Themes;assembly=WPF.Themes”
            themes:ThemeManager.Theme=”ShinyRed”
    Title=”Window1″ Height=”300″ Width=”300″>

C#とIronPython 2.6の連携方法(変数の受け渡し方)

2010年2月20日 土曜日

IronPythonのインストールディレクトリにあるIronPython.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Core.dll, Nicrosoft.Dynamic.dllに参照を通す。

下記のソースコードのような方法でC#のコードからPythonのスクリプトの実行と変数の値のやりとりが可能。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;

    public class Class1
    {
        public IronPython.Runtime.List Val1;
        public IronPython.Runtime.List Val2;
    }
    class Program
    {
        static void Main(string[] args)
        {
             ScriptEngine engine = Python.CreateEngine();
             ScriptSource source = engine.CreateScriptSourceFromString(
@”print obj1.Val1
result = obj1.Val2″);
             ScriptScope scope = engine.CreateScope();
             var obj1 = new Class1()
             {
                 Val1 = new IronPython.Runtime.List { 1, “abc” },
                 Val2 = new IronPython.Runtime.List { 2, “def”}
             };
             scope.SetVariable(“obj1″, obj1);
             source.Execute(scope);
             object[] result = scope.GetVariable<IronPython.Runtime.List>(“result”).ToArray();
             Console.WriteLine(“{0},{1}”, result[0], result[1]);
        }

    }

Django1.1.1をIronPython2.6にインストールし、importするとエラー

2010年2月20日 土曜日

Django1.1.1をIronPython2.6にインストールし、importすると下記のようなエラーが発生する。

Cannot call lazy() with both str and unicode return types.

http://bitbucket.org/jdhardy/django-ironpython/changeset/b70eeacda60c/

を参考にして、django.utils.

assert not (cls._delegate_str and cls._delegate_unicode),

の行を

 assert (str is unicode) or not (cls._delegate_str and cls._delegate_unicode), 

に変更したらとりあえず回避できた。

HttpListenerクラスをVista or Windows 7でUACが有効のまま利用すると、HttpListenerExceptionが発生する

2010年2月18日 木曜日

簡単にシンプルなHttpサーバの機能を作成できるHttpListenerクラスをWindows 7 またはVistaのUACが有効な状態で利用するとHttpListenerExceptionが発生して利用できない。

管理者モードすると利用可能になるが、HttpListenerクラスのPrefixesプロパティに指定するUriを”http://localhost:8080″のようにlocalhostを使って指定すれば管理者権限がなくても使用可能となる。
つまり、同一PC内の通信であれば管理者権限がなくても利用可能。

ASP.Net MVCでページキャッシュを行い、DB更新時にキャッシュを破棄するには。

2010年2月10日 水曜日

データベースキャッシング機能を有効にする。データベース名が「TestDB 」、キャッシュ機能を有効にしたいテーブル名が「Table1 」である場合、Visual Studio 2008コマンドプロンプトで下記を実行する。

aspnet_regsql.exe -S .\SQLEXPRESS -E -d TestDB -ed
aspnet_regsql.exe -S .\SQLEXPRESS -E -d TestDB -t Table1 -et 

Web.configの<system.web>内に下記を設定する。DBへの接続文字列が「TestDBConn」の場合。varyByParam=”*”を指定することで、パラメータごとにCacheが作られるようになる。sqlDependencyを指定することで、指定したDBのテーブルが更新されるとキャッシュが破棄される。

<caching>
      <sqlCacheDependency enabled=”true” pollTime=”5000″>
        <databases>
          <add name=”TestDB” connectionStringName=”TestDBConn” />
        </databases>
      </sqlCacheDependency>
 <outputCacheSettings>
    <outputCacheProfiles>
     <add name=”TestCache” enabled=”true” duration=”3600″ varyByParam=”*” sqlDependency=”TestDB :Table1″ />
    </outputCacheProfiles>
   </outputCacheSettings>
    </caching>

 Asp.Net MVCのControllerクラスのメソッドでOutputCache属性を使ってキャッシュプロファイルを設定する。

    [HandleError]
    public class TestController : Controller
   {
        [OutputCache(CacheProfile = "TestCache")]
        public ActionResult Index(string id)
        {
        }