私はMVCのやり方に比較的慣れておらず、ベースコントローラーに多くの無関係なデータをロードするため、パフォーマンスの問題が少し発生しました。アクションフィルターについて少し読んだことがありますが、進め方についてアドバイスがあるかどうか疑問に思っていました. これが私の問題です:
BaseController と呼ばれる基本コントローラーから継承する RegController と呼ばれるコントローラーがあります。ベース コントローラーの onActionExectuting メソッドで、viewbag、viewdata などの表示ページで使用されるいくつかの変数などを読み込みます。結果の型が ActionResult のアクションに対してのみ、このようなものを読み込む必要があります。同じ RegController には、Json のみを返すページやビュー テンプレートを読み込まないため、この追加情報のすべてを読み込む必要のない JsonResult アクションもあります。既存のフレームワーク機能内でこれを適切に処理する方法について誰か提案がありますか? 代わりに、これらのアクションを別のコントローラーに配置する必要がありますか? これと同じ方法でさまざまな機能を分割した多くのコントローラーがあり、それらすべてを JsonResultController などに移動するのではなく、アクションタイプをフィルター処理できることを望んでいます。
以下のコード(一部は疑似):
public class BaseController : Controller
{
protected string RegId;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.ActionParameters.ContainsKey("rid") && filterContext.ActionParameters["rid"] != null)
RegId = filterContext.ActionParameters["rid"].ToString();
Reg oReg = new Reg(RegId);
// IF A VISIBLE PAGE IS BEING SERVED UP, I NEED TO LOAD THE VIEWDATA FOR THE PAGE
SetViewAndMiscData(oReg);
// IF THIS IS A JSON RESULT ACTION, I DO NOT WANT TO LOAD THE VIEWDATA FOR THE PAGE
}
}
public class RegController : BaseController
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
}
public ActionResult Page(string id)
{
// THE VIEW DATA SHOULD BE SET FROM THE BASECONTROLLER FOR USE IN THE PAGE
return View();
}
public JsonResult Save(string id, string data)
{
// I DON"T NEED ALL OF THE VIEW AND MISC DATA LOADED HERE, INCLUDING THE AUTO LOAD
// OF THE REG OBJECT SINCE I DO IT HERE FROM THE PASSED PARAMS.
GenericResponseObject Response = new GenericResponseObject();
Reg oReg = new Reg(id);
if (!oReg.IsValid)
{
Response.Status = 1;
Response.Message = "Invalid Record";
}
else
Response = oReg.SaveData(data);
return Json(Response);
}
}