2011年7月14日更新

ASP.NET関連のいろいろまとめ

WCF Data Services

WCF RIA Servicesで子テーブルを含む場合は.Include()ですが、 WCF Data Servicesでは.Expand()を使います。 同じ作業なのにいちいち名前が違っていてめんどくさい。。。

ちなみにExpand()は、$expand=xxxに渡す文字列を引数に書きます。

ASP.NET MVC2

はじめてつかった。

JSONを返す

コントローラからJSONを返すには、 戻り値の型をJsonResultに変えて(通常はActionResult)、 Jsonヘルパメソッドの戻り値を返します。

public PartialViewResult Index()
{
	var q = from c in ctxt.Items select c;
	return Json(q, [JsonRequestBehavior]);
}

それから、コントローラの中からクエリ文字列をみるには、 Request.QueryString[]を調べるといいみたい。

ユーザコントロールを使う

コントローラの戻り値をPartialViewResultに変更して、 PartialView()により作成されたものを返すように作ります。

public PartialViewResult Index()
{
	var q = from c in ctxt.Items select c;
	return PartialView(q);
}

次に、Html.Action()を使ってその結果を取り込みます。

<%: Html.Action("Index", "Controller1") %>

単純な取り込みでよければ、 ページの最初あたりでコントロールを登録すると使えるようにります。

<%@ Register TagPrefix="my"
 TagName="ctl1"
 Src="~/Views/Controller1/Index.ascx" %>

runat="server"は必須です。

<my:ctl1 runat="server"/>

ただしこの場合、ユーザコントロールの中でModelを参照すると、 呼び出し元のModelをそのまま参照してしまいます。 あまり使い道はなさそうです。

相対URL

開発環境と実環境でパスが異なる場合、絶対パスは使えないし、 同じビューが異なるURLで使われたりするので厳しい。 こういうとき、Url.Content(string path)を使います。 これはpathが~/ではじまっている場合、 正しいURLへ書き換えてくれます。

URLの部分取得

Controller/Action/idなどから、 idのような特定部分を取り出したい場合、 Request["id"]のように調べると見れます。 または、ViewData["id"]とか。

?Length=7

Html.ActionLink("Action", "Controller", new{ id=3 })

このようにすると、Home/Action?Length=7という どこに設定したのだか分からないパラメータ付きURLになります。 これはメソッドのオーバーロードが悪さをしているらしいので、 全部パラメータを与えてあげれば解決です。

Html.ActionLink("Action", "Controller", new{ id=3 }, new{})

ここでnew{}の代わりにnullを使うとうまくないっぽい。

戻りURL

コントローラで何かを処理した後の戻りURL、 たとえば削除したときに戻る先はどうするの、という話。

UrlReferrerを使う

単純に戻る場合はUrlReferrerをみればいいです。 ただし、URLを直接入力した場合はnullなので使いづらい。

if(Request.UrlReferrer != null)
	Redirect(Request.UrlReferrer.AbsolutePath);

戻りURLパラメータを渡す

RedirectToUrlのようなパラメータにフォーム等で渡す方法。

<% using(Html.BeginForm()) { %>
	<%: Html.Hidden("redirectToUrl", "...") %>
<% } %>

コントローラ側では、引数として受け取る。

public ActionResult Action1(string redirectToUrl)
{
	...
}

jQuery.autocomplete(url, option)

autocompleteは、urlからデータを読み込み、 その内容をもとに表示します。 このデータは|で区切った行の集まりです。 また、urlはQUERY_STRINGに"q=(検索文字列)"を渡すので、 データを絞り込むのにそれが使えます。

key1|value1
key2|value2
...

配列をもとにオートコンプリートする場合は、 autocomplete()の代わりにautocompleteArray()を使います。

オプションはいろいろありますが、よく使うものを例に書きました。

$(document).ready(function(){
	$('#target').autocomplete(url, {
		max: 25,
		formatItem: function(r){ return r[1] },
		formatResult: function(r){ return r[1] }
	}).result(function(e, r){
		location.href = r[0]
	})
})

result()は一覧から選択したときに関数を実行します。

jQuery.dataTables

いろいろありすぎてよくわからない。