ActionFilter'sを使用して、コントローラのモデル(データ)をさまざまな形式(JavaScript/XML/JSON/HTML)で返したいとします。 ActionFilterはコントローラのActionResultでActionFilterを使用してJsonResultを返します。
:
public class ResultFormatAttribute : ActionFilterAttribute, IResultFilter
{
void IResultFilter.OnResultExecuting(ResultExecutingContext context)
{
var viewResult = context.Result as ViewResult;
if (viewResult == null) return;
context.Result = new JsonResult { Data = viewResult.ViewData.Model };
}
}
そして、それの実装は:ここで私はこれまででだどこだ
[ResultFormat]
public ActionResult Entries(String format)
{
var dc = new Models.WeblogDataContext();
var entries = dc.WeblogEntries.Select(e => e);
return View(entries);
}
OnResultExecuting
メソッドが呼び出されますが、私はモデル(データを取得しておりません)はJSONオブジェクトとして返され、フォーマットされました。私のコントローラはViewをレンダリングするだけです。
アップデート:私はthis questionへダーリンディミトロフの答えの提案を以下しています。
return Json(entries);
をコントローラのアクションにするJsonResultの戻り値の型と:
IResultFilter.OnResultExecutingはvoidを返します。そして、そのような状況ではJsonクラスは利用できません。 – roosteronacid