さて、今私のメインコントローラークラスでは、それぞれ別々のものに次のようなビューを返すようにしています。
public ActionResult Contact()
{
return View();
}
それほど難しくないので、私はこのダウンパットを持っています!私が知りたいのは、このアクション結果で他に何ができるかということです。これによって他にどのようなことが達成できますか?
さて、今私のメインコントローラークラスでは、それぞれ別々のものに次のようなビューを返すようにしています。
public ActionResult Contact()
{
return View();
}
それほど難しくないので、私はこのダウンパットを持っています!私が知りたいのは、このアクション結果で他に何ができるかということです。これによって他にどのようなことが達成できますか?
ビューの代わりにハードコードされたコンテンツを返すことができます。
public ActionResult Contact()
{
return Content("Hello");
}
JSONを返すことができます:
public ActionResult Contact()
{
return Json(new { Foo = "bar" }, JsonRequestBehavior.AllowGet);
}
javascriptを返すことができます:
public ActionResult Contact()
{
return JavaScript("alert('Hello World');");
}
ファイルを直接ストリーミングできます。
public ActionResult Contact()
{
return File(@"c:\work\foo.pdf", "application/pdf", "foo.pdf");
}
404を返すことができます:
public ActionResult Contact()
{
return HttpNotFound();
}
あなたは401を返すことができます:
public ActionResult Contact()
{
return new HttpUnauthorizedResult();
}
また、組み込みのアクション結果がニーズに合わない場合は、いつでもカスタムの結果を作成できます。たとえば、XMLを返すもの:
public class XmlResult : ActionResult
{
private readonly object _data;
public XmlResult(object data)
{
if (_data == null)
{
throw new ArgumentNullException("data");
}
_data = data;
}
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "text/xml";
var serializer = new XmlSerializer(_data.GetType());
serializer.Serialize(response.OutputStream, _data);
}
}
その後:
public ActionResult Contact()
{
return new XmlResult(new { Foo = "Bar" });
}
ご覧のとおり、できることはたくさんあります。問題は、何をしたいのかということです。
通常、コントローラーのアクション内では、データ ストアからデータを取得し、それをビューに返します。どの種類の ActionResults があるかを知りたい場合は、ここでそれらのリストを見つけることができます。