我有一个带家庭控制器的mvc项目
public class HomeController : BaseController
{
[MyActionFilter]
public ActionResult Index(string id)
{
var model = HttpContext.Items["model"] ;
var viewname = HttpContext.Items["viewname"] as string;
if (model != null)
return View(viewname, model);
model = GetDefaultModel(id);
return View(model);
}
}
然后我有一个动作过滤器
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var id = filterContext.ActionParameters["id"];
List<IWillDoTheThing> myDoTheThings = LoadAllTheImplementationsOf<IWillDoTheThing>();
var myObject = myDoTheThings.Where(i => i.IdISupport == id).First().ExecuteTheThing();
filterContext.HttpContext.Items["viewname"] = myObject.ViewName;
filterContext.HttpContext.Items["model"] = myObject.Model;
}
}
然后是一个接口和一个类
public interface IWillDoTheThing
{
string IdISupport { get; set; }
MyObject ExecuteTheThing();
}
public class MyObject
{
public string ViewName { get; set; }
public object Model { get; set; }
}
根据id,我加载viewname和model(从其他程序集动态)。所以使用这种方法,我可以更改主页没有任何大问题。我唯一的问题是,这是一个好方法还是有更好的方法来做到这一点。
帮助将不胜感激。
此致